Json递归解析实例

  

  最近遇到包含多层的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);
    }

 

转载于:https://www.cnblogs.com/digod/p/10561086.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这里举一个fastjson使用递归向下算法解析JSON实例。假设有如下JSON字符串: ``` { "name": "Tom", "age": 18, "gender": "male", "address": { "province": "Guangdong", "city": "Shenzhen", "district": "Futian" } } ``` fastjson解析这个JSON字符串时,会使用递归向下算法进行解析。具体的解析过程如下: 1. 初始状态:读取到 '{',进入parseObject方法。 2. parseObject方法:创建JSONObject对象,读取到 "name",调用parseKey方法。 3. parseKey方法:读取到 ':',调用parseValue方法。 4. parseValue方法:读取到 "Tom",将其作为值赋给"name"键。 5. parseObject方法:读取到 ',',继续调用parseKey方法。 6. parseKey方法:读取到 ':',调用parseValue方法。 7. parseValue方法:读取到 18,将其作为值赋给"age"键。 8. parseObject方法:读取到 ',',继续调用parseKey方法。 9. parseKey方法:读取到 ':',调用parseValue方法。 10. parseValue方法:读取到 "male",将其作为值赋给"gender"键。 11. parseObject方法:读取到 ',',继续调用parseKey方法。 12. parseKey方法:读取到 ':',调用parseValue方法。 13. parseValue方法:读取到 '{',进入parseObject方法。 14. parseObject方法:创建JSONObject对象,读取到 "province",调用parseKey方法。 15. parseKey方法:读取到 ':',调用parseValue方法。 16. parseValue方法:读取到 "Guangdong",将其作为值赋给"province"键。 17. parseObject方法:读取到 ',',继续调用parseKey方法。 18. parseKey方法:读取到 ':',调用parseValue方法。 19. parseValue方法:读取到 "Shenzhen",将其作为值赋给"city"键。 20. parseObject方法:读取到 ',',继续调用parseKey方法。 21. parseKey方法:读取到 ':',调用parseValue方法。 22. parseValue方法:读取到 "Futian",将其作为值赋给"district"键。 23. parseObject方法:读取到 '}',将JSONObject对象作为值赋给"address"键。 24. parseObject方法:读取到 '}',JSON解析完成。 以上就是fastjson使用递归向下算法解析JSON的一个实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值