文档章节

Json递归解析实例

o
 osc_n6euf5h6
发布于 2019/03/19 22:50
字数 287
阅读 23
收藏 0

精选30+云产品,助力企业轻松上云!>>>

  

  最近遇到包含多层的Json字符串解析的问题,查了一些帖子,不能很好解决。看了下帮助文档,用下面方法解决。

上代码

Maven 库

<!-- https://mvnrepository.com/artifact/org.json/json -->
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180130</version>
    </dependency>

 

Java 代码

由于业务需要,下面函数里只需要取到各个层级Json中的key, 放到一个集合中。大家也完全可以取完整的key和value. 根据自己需要,稍作修改即可。下面的关键是while 循环中的两个If 语句,很多帖子都没有把这里写清楚,

第一个 if (jsonObj.optJSONArray(key) instanceof JSONArray) 判断这个key 的value 还是不是一个有多层级的JSONArray.

第二个 if (jsonObj.optJSONObject(key) instanceof JSONObject) 判断这个key 的value 是不是一个只有一层的JSONObject.

 

public static void jsonObjParseRecur(Set<String> set,String jsonText) {
        try{
            JSONObject jsonObj = new JSONObject(jsonText);
            Iterator<String> keys=jsonObj.keys();
            while(keys.hasNext()){
                String key = keys.next();
                set.add(key);
//                System.out.println(key+": " + jsonObj.get(key).toString());
                if (jsonObj.optJSONArray(key) instanceof JSONArray) {
                    JSONArray jsonArray = jsonObj.getJSONArray(key);
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonArrayObj = jsonArray.getJSONObject(i);
                        String jsonArrayObjString = jsonArrayObj.toString();
                        jsonObjParseRecur(set,jsonArrayObjString);                            
                    }                                    
                }
                if (jsonObj.optJSONObject(key) instanceof JSONObject) {
                        jsonObjParseRecur(set,jsonObj.optJSONObject(key).toString());                                                            
                }
            }

        } catch (JSONException e) {  
            e.printStackTrace();  
        } 
//        System.out.println(set);
    }

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Flink SQL 解析复杂(嵌套)JSON

在 Flink 1.10 的 Table API 和 SQL 中,表支持的格式有四种: CSV FormatJSON FormatApache Avro FormatOld CSV Format 官网地址如下:https://ci.apache.org/projects/flink/flink-docs-r......

osc_rc2pix81
04/13
486
0
Flink SQL 解析复杂(嵌套)JSON

在 Flink 1.10 的 Table API 和 SQL 中,表支持的格式有四种: CSV FormatJSON FormatApache Avro FormatOld CSV Format 官网地址如下:https://ci.apache.org/projects/flink/flink-docs-r......

春江花夜月
04/12
0
0
Golang, Swift, Nodejs 和 Rust 性能对比

原文在:http://771dian.com/cb/topic/4yi18ADKg 先说结论: 一般程序:最快,比快一丁点;比快2倍;比快3倍。。。 深度递归:形式完全逆转,最快,比快一倍;比快2.3倍;比快3倍 综合来看,...

点空
2016/02/01
4.8K
0
Android 解析未知格式的json数据

1、递归一 有的时候我们需要解析未知的json。或者说是动态的json。那么我们并不知道key具体是多少,或者说key不是固定的。这时候就需要解析动态key的方法。 这个方法是我在实现解析前台传入的...

osc_6ogjsu3t
2019/03/04
0
0
qt creator源码全方面分析(3-6)

目录 qtcreatorplugin.pri qtcreatorplugin.pri 上一节我们介绍了qtcreatorlibrary.pri,现在我们介绍qtcreatorplugin.pri,其实插件的本质也是动态库,所以qtcreatorplugin.pri实现的内容和...

codeForFamily
04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 那么长的绳子,你这是放风筝呢

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @ 巴拉迪维:黑豹乐队的单曲《无地自容》 耳畔突然响起旋律,是那首老歌。中国摇滚有了《一无所有》不再一无所有;中国摇滚有了《无地自容》不...

小小编辑
53分钟前
55
1
《吐血整理》-顶级程序员书单集

你知道的越多,你不知道的越多 给岁月以文明,而不是给文明以岁月 前言 王潇:格局决定了一个人的梦想,梦想反过来决定行为。 那格局是什么呢? 格局是你能够看见的深度、广度和密度。 王潇认...

敖丙
2019/12/11
8
0
我可以在Android版式中加下划线吗? - Can I underline text in an Android layout?

问题: 如何在Android布局xml文件中定义带下划线的文本? 解决方案: 参考一: https://stackoom.com/question/A31z/我可以在Android版式中加下划线吗 参考二: https://oldbug.net/q/A31z/...

法国红酒甜
55分钟前
26
0
干掉ELK | 使用Prometheus+Grafana搭建监控平台

什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 Prometheus的特点 · 多维度...

木九天
今天
34
0
拉勾网拉你上勾

预览 需求简介 拉勾网是一个互联网行业的一个招聘网站,上面有许多职位,于是乎,小编想提取指定职位的基本信息(职位名,薪水,工作经验,工作地点,教育背景),然后插入 MongoDB 数据库,...

木下瞳
2019/04/17
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部