zoukankan      html  css  js  c++  java
  • 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);
        }
  • 相关阅读:
    Druid连接池的简单使用
    JDBC工具包commons-dbutils的基本介绍
    Java IO: ByteArrayOutputStream使用
    开源数据库连接池之Tomcat内置连接池
    jquery里面的$(this)和this的区别
    css自定义属性(css变量)
    CSS选择器
    IntelliJ IDEA 学习笔记
    JSP基本的语法、3个编译指令、7个动作指令、9个内置对象
    CSS3 box-shadow
  • 原文地址:https://www.cnblogs.com/digod/p/10561086.html
Copyright © 2011-2022 走看看