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);
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM