Java中JSON数据的读取和解析

2023-10-26

        在做springboot项目时用到了json文件读取和解析,所以在这里记录一下学习过程中总结的一些点,希望对大家有帮助~

  • 配置fastJson

<!--引入fastjson依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.35</version>
</dependency>
  • 构建工具类(方便多次调用时重复使用)

public static JSONObject readJsonFile(String filename){
        String jsonString = "";
        File jsonFile = new File(filename);
        try {
            FileReader fileReader = new FileReader(jsonFile);
            Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
            int ch = 0;
            StringBuffer stringBuffer = new StringBuffer();
            while ((ch = reader.read()) != -1){
                stringBuffer.append((char) ch);
            }
            fileReader.close();
            reader.close();
            jsonString = stringBuffer.toString();
        } catch (FileNotFoundException e){
            JSONObject notFoundJson = new JSONObject();
            notFoundJson.put("code",Code.GET_ERR);
            notFoundJson.put("msg","该地区GeoJson文件不存在!");
            return notFoundJson;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return JSONObject.parseObject(jsonString);
    }
  • json文件示例(以geojson为例,数据结构比较复杂,只是层次比较多)

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "properties": {
                "adcode": 110101,
                "name": "东城区",
                "center": [
                    116.418757,
                    39.917544
                ],
                "centroid": [
                    116.416739,
                    39.912912
                ],
                "childrenNum": 0,
                "level": "district",
                "acroutes": [
                    100000,
                    110000
                ],
                "parent": {
                    "adcode": 110000
                }
            },
            "geometry": {
                "type": "MultiPolygon",
                "coordinates": [
                    [
                        [
                            [
                                116.387664,
                                39.960923
                            ],
                            [
                                116.38948,
                                39.961038
                            ],
                            [
                                116.389506,
                                39.963147
                            ],
                            [
                                116.396959,
                                39.963204
                            ]
                        ]
                    ]
                ]
            }
        }
    ]
}
  • 调用工具类读取数据:

String filePath = "文件路径";
// 读取json文件
JSONObject jsonObejct = readJsonFile(filePath);
  • 读取json对象中的"features"字段内容,是数组类型的,采用以下方式:

// 方式一
JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
// 方式二
JSONArray featureArray = jsonObejct.getJSONArray("features");
  • 读取对象类型字段:

// 方式一
JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
// 方式二
JSONObject propertiesObject = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties");
  • 读取字符串类型:

// 方式一
String type = jsonObejct.get("type").toString();
// 方式二
String type = jsonObejct.getString("type");
  • 读取整数类型:

// 方式一
String type = jsonObejct.get("type").toString();
// 方式二
String type = jsonObejct.getString("type");
  • 整体解析:

String filePath = "文件地址/文件名.json";
JSONObject jsonObejct = ReadJsonUtils.readJsonFile(filePath);
​
// 方式一(很复杂,语句分开,但是结构清晰)
// 读取json文件的features字段,并转换为json数组
JSONArray featureArray = JSON.parseArray(jsonObejct.get("features").toString());
// 读取数组第一个元素,为地区对象
JSONObject regionObject = JSONObject.parseObject(featureArray.get(0).toString());
// 读取地区对象中的参数对象
JSONObject propertiesObject = JSONObject.parseObject(regionObject.getString("properties"));
// 读取参数对象的名称
String name = propertiesObject.getString("name");
// 读取参数对象的地区代码
int adcode = propertiesObject.getIntValue("adcode");
// 读取地区对象的几何对象
JSONObject geometryObject = JSONObject.parseObject(regionObject.get("geometry").toString());
// 读取几何字段中的坐标数组
JSONArray coordinates = JSONObject.parseArray(geometryObject.get("coordinates").toString());
// 读取几何对象中的类型名称
String type = geometryObject.getString("type");
​
// 方式二(无需每次重新转换类型,一行搞定)
String name = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("properties").getString("name");
String type = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getString("type");
JSONArray coordinates = jsonObejct.getJSONArray("features").getJSONObject(0).getJSONObject("geometry").getJSONArray("coordinates");

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中JSON数据的读取和解析 的相关文章

  • 具有替代方案的重载方法值表

    我有编译器抱怨的以下代码 val state KTable String String builder table BARY PATH Materialized as PATH STORE 错误信息 error home developer
  • IBM WebSphere MQ 2042 错误

    我有以下代码 int openOptions MQC MQOO INQUIRE MQC MQOO FAIL IF QUIESCING MQC MQOO INPUT SHARED 执行时 我收到错误 com ibm mq MQExceptio
  • 使用 Struts 2.2.x 的简单 JSON 示例?

    我在获取 JSON 结果时遇到问题支柱2 2 1 1 http struts apache org 2 2 1 1 index html 有没有人有一个简单的工作示例 可以使用以下命令将 JSON 结果返回到 JSP支柱2 2 1 1并准备
  • 消息通知产生“此内容无法显示”

    我正在通过网络挂钩向 Slack 发送消息 使用单个 文本 JSON 元素的消息通知可通过适用于 OS X 和 iOS 的 Slack 应用程序生成正确的通知文本 频道中的消息文本也是正确的 但是 当使用新的 阻止 方法时 通知文本变为 无
  • 通过selenium在firefox中打开私有模式

    实际上我想通过selenium打开firefox浏览器的隐身 私密模式 但每次我尝试时都是以正常模式打开firefox 经过一番谷歌搜索后 我得到了这段代码 我用它通过 selenium 在 Firefox 中打开私有模式 但它不起作用 F
  • Python 替换嵌套 JSON 中的 None 值

    我一直在尝试替换下面 JSON 字典中的 None 值 我将如何遍历这个 json 并将 None 值替换为空字符串 我很难理解如何遍历嵌套 json 如果有人能帮我解决这个问题 我会很高兴 下面的嵌套 json 示例 或者在 python
  • Java 方法存根

    这就是我必须做的 为下面的 main 调用的方法定义存根 每个存根应打印 FIXME Finish methodName 后跟换行符 并应返回 1 输出示例 FIXME Finish getUserNum FIXME Finish getU
  • 我应该使用 Facelets“jsfc”属性吗?

    Facelets 使用jsfc属性将 HTML 元素转换为其关联的JSF成分 这对于快速原型设计非常有帮助 因为它允许您使用可视化设计工具创建视图 然而我最近发现this http weblogs java net blog 2008 12
  • Java 文档生成器为 Xml 字符串返回 null 文档

    I have tried all possible answers https stackoverflow com questions 33098082 passing xml string as document returning nu
  • Hibernate - 一对多关系和孤儿删除级联

    我有一个基本的一对多关系父 子关系 就像 Hibernate 参考书第 21 章中一样 级联仅从子级到父级 保留级联只是因为我不想在删除子级时删除父级 当我向父级添加一个子级并保存该子级时 出现 TransientObjectExcepti
  • 如何将 JMX 绑定到特定接口?

    我目前正在启动我的 Java VMcom sun management jmxremote 属性 以便我可以通过 JConsole 连接到它进行管理和监控 不幸的是 它监听机器上的所有接口 IP 地址 在我们的环境中 经常会出现多个 Jav
  • 解析嵌套的 JSON Swift 3 [重复]

    这个问题在这里已经有答案了 我正在尝试在 Swift 3 中解析复杂的 JSON 文件 我在获取值时遇到问题 我找到了一些示例代码并尝试对其进行了一些调整 但它不起作用我当前收到错误 Type NSArray 没有下标成员 我什至不确定这是
  • 如何处理过时的连接?

    我们的应用程序是一个 J2EE 应用程序 在 Websphere 6 1 上通过 Mainframe DB2 后端使用 Struts EJB Hibernate 最近已投入生产 我们收到过时的连接异常当用户第一次或有时登录应用程序时 此异常
  • 如何从 Java 中的字符串表示形式获取 Locale?

    有没有一种巧妙的方法来获得Locale http java sun com javase 6 docs api java util Locale html来自 Locale 返回的 编程名称 的实例toString 方法 一个明显且丑陋的解
  • 比较 Java 中的两个基元数组?

    我知道 Arrays deepEquals Object Object 但这不适用于原始类型 由于数组和自动装箱的限制 请参阅这个相关帖子 https stackoverflow com questions 517751 java gene
  • java 对字母数字字符串进行排序

    我有这个数组存储用户添加的一些 URL 的后缀 U2 U3 U1 U5 U8 U4 U7 U6 当我这样做时 for Map
  • ZipInputStream.getNextEntry() 如何工作?

    假设我们有这样的代码 File file new File zip1 zip ZipInputStream zis new ZipInputStream new FileInputStream file 假设您有一个包含以下内容的 zip
  • jquery ajax - 返回 json 或纯 html 更好

    当时间从ajax返回时 我应该返回 json 编码 并使用 jquery parseJSON 并使用 document createElement 并将数据附加到刚刚创建的元素内 或者最好以 html 文本形式返回 example div
  • JSP:已为此响应调用 getOutputStream()

    我正在使用此代码从 FTP 下载文件 我在 tomcat 日志中遇到异常 如下所示 我能够执行我的任务 但我的日志大小增加了很多 Code if file exists if file canRead IE6 SSL PDF Bug htt
  • NullValueHandling.Ignore 使用 JsonConverter::WriteJson

    我正在尝试执行自定义序列化 所有快乐路径代码都可以工作 但空值路径的行为并不像我想要的那样 我已将序列化器设置设置为NullValueHandling Ignore我的对象图的其他部分为空 并且不使用我的自定义序列化 已删除空值 看起来 N

随机推荐

  • BEVDet视觉检测方案

    github资源 GitHub HuangJunJie2017 BEVDet Official code base of the BEVDet series 源码解读 BEVDet系列源码解读 知乎
  • ansible报错:Failed to connect to the host via ssh: Permission denied

    原因 没有在ansible管理节点 即安装ansible的节点 上添加目标节点 即需要管理的节点 的ssh认证信息 解决办法 1 在管理节点生成公钥 ssh keygen 路径为 ssh id rsa pub 2 添加目标节点的SSH认证信
  • Findbugs中常见错误的分类和原因分析

    Findbugs 中的常用的bug pattern配置 Bug pattern description Bad practice 不好的习惯 Correctness 代码的正确性 Dodgy 小问题 Malicious code vulne
  • Linux项目实训一

    1 登录进入系统 修改个人密码 passwd 2 使用简单命令 date cal who echo clear 等 了解 linux 命令格式 date命令 再在屏幕上显示或设置系统的日期和时间 如果没有选项和参数 那么将直接显示系统当前时
  • Python脚本和图片相互转换

    场景说明 最近模拟病毒的时候 导演说不能有下载远程图片和带本地图片的现象 不然演示环境容易影响演示效果 于是要考虑python脚本生成图片 接着 需要考虑图片怎么融合进去 考虑到在pyinstaller打包的时候放进去 但是发现除了ico文
  • Qt中快捷键& 的使用方法

    Qt中为组件添加快捷方式使用 键 具体用法如下 include
  • debian系统配置ip地址

    在Debian中网卡的设置可以通过 etc network interfaces文件来进行 具体可分为三种不同的配置方式 DHCP自动获取 静态分配IP地址和PPPoE宽带拨号 具体设置如下 在进行配置之前 首先进入 etc network
  • Python Excel 操作 Openpyxl 模块笔记

    xlsx 是 Microsoft Excel 使用的开放 XML 电子表格文件格式的文件扩展名 xlsm 文件支持宏 xlsx 是专有的二进制格式 而 xlsx 是基于 Office Open XML 格式的 Excel 文件处理 1 打开
  • Pycharm结合Git、GitHub配置与其常用操作

    文章目录 一 Pycharm配置Git 1 Pycharm Git安装准备 2 Pycharm配置Git路径 二 Pycharm配置GitHub 1 准备GitHub账号 2 HTTP代理设置 3 连接GitHub账号 1 账号登录 Use
  • python字典键值对的值可以重复吗_当字典键相同时,为什么Python只保留最后一个键值对?...

    假设我创建了一个字典a dictionary 其中两个键值对具有相同的键 In 1 a dictionary key 5 another key 10 key 50 In 2 a dictionary Out 2 key 50 anothe
  • SqliLabs Less25-25a

    第二十五关 GET类型基于单引号 and or过滤 你所有的and or都是我们的 的错误 1 使用union select 1 2 3 尽量避过and or http 127 0 0 1 500 Less 25 id 1 union se
  • 机器学习笔记-多分类学习,类别不平衡,决策树

    读书笔记 多分类学习 基本思想 拆解法 将多分类任务拆解为若干个二分类任务求解 先对这些问题经拆分 为拆分出的每个二分类任务训练一个分类器 测试时 对这些分类器的预测结果进行集成以获得最终的多分类结果 拆分策略 one vs one 一对一
  • 【教程】TestComplete测试桌面应用程序教程(六)

    TestComplete是一款具有人工智能的自动UI测试工具 利用自动化测试工具和人工智能支持的混合对象识别引擎 轻松检测和测试每个桌面 Web和移动应用程序 其中 TestComplete支持测试使用C C VB NET Java Del
  • 【STM32】STM32单片机结构及部件原理

    STM32是目前比较常见并且多功能的单片机 要想学习STM32 首先要去了解它的基本构成部分以及各部分的原理 单片机型号 正点原子STM32F103ZET6 目录 STM32内部结构总览图 2 内部结构解析 STM32内部结构总览图 2 内
  • 网络正常,某个网页或软件无法加载

    你是否经历过切换网络后 有时会出现虽然能够上网 但偶尔出现个别网页加载失败 知乎 哔哩哔哩 一般是由于设备DNS缓存出现异常 以下是针对个别系统的解决方法 其他系统原理相同 win10 1 进入网络适配器 更改Internet协议DNS服务
  • PCL RANSAC 拟合直线

    RANSAC拟合直线 一 算法原理 1 算法简介 2 直线拟合 3 模型系数 4 参考文献 二 代码实现 三 结果展示 四 python代码 一 算法原理 1 算法简介 RANSAC算法由Fischler和Bolles于1981年提出 是一
  • linux下mysql写中文变成问号_如何解决数据库插入中文字体时显示问号

    欢迎点击 算法与编程之美 关注我们 本文首发于微信公众号 算法与编程之美 欢迎关注 及时了解更多此系列文章 问题描述 我们在进行数据库的增删改查的操作时 当我们插入英文或者数字等字符串的时候能够正常显示 但的当我们插入中文字体的时候我们就会
  • 火狐解决OCSP回应包含过期信息的问题

    连接 addons mozilla org 时发生错误 OCSP 回应包含过期信息 错误码 sec error ocsp old response hosts文件添加 vi etc hosts 117 18 237 29 ocsp digi
  • 马云的一席话

    关于坚持 今天很残酷 明天更残酷 后天很美好 但是大多数人死在明天晚上 看不到后天的太阳 所谓坚持成功 不是坚持 一直成功 而是坚持到 成功为止 关于创新 做任何事 必须要有突破 没有突破 就等于没做 行业饱和即意味危机来临 但巴菲特在股票
  • Java中JSON数据的读取和解析

    在做springboot项目时用到了json文件读取和解析 所以在这里记录一下学习过程中总结的一些点 希望对大家有帮助 配置fastJson