項目中解析JSONObject遇到的一個問題-value是JSONArray嵌套JSONArrray

項目中有如下一個JSONObject, 如何取出“20180612”

項目中用的alibaba的fastjson

項目中取的方法如下所示

然後我就試圖自己構造這個dataSet,構造完之後就開始取date

下圖中倒數第二行可以取出來,但是照着上面的方法寫,也就是倒數第一行所示

JSONArray arr0 = result.getJSONArray(0);​

這行代碼會意外中斷

好一會我都意識不到最後一行代碼的寫法爲啥項目中能取到,我的就取不到

然後我就通過斷點看了一下json結構,紅框框處的地方顯示出兩者的不同

項目中value下面還有一級,而我構造的這個就沒有

項目中的value相當於JSONArray套JSONArray

而我構造的value相當於value就是一層JSONArray

然後我就意識到項目中result的value取值其實是一個二維數組

第一維是按date劃分的,第二維是相當於一個bean中各個字段的取值

第二維其實裏用bean挺好的,外層一個JSONArray,內層是一個一個bean,多好啊,爲啥項目中內層非要用一個JSONArray,用數組甚至沒法表示每個元素的含義,用JSONObject也比這個強

// JSONArray中能添加不同類型的元素,但是不是鍵值對的形式,也是通過下標取數的
// JSONObject完全能取代map,也可以用來構造javabean,這就是項目中爲啥到處都是JSON
// JSONArray和普通的數組用法相似,通過下標索引,甚至可以存放不同類型的元素,也可以嵌套使用

然後我就開始重新構造這個dataSet

下面附上完整代碼

public class testJson {
 
    public static void main(String[] args) {
 
        JSONObject dataSet = new JSONObject();
 
        JSONArray value_out = new JSONArray(); // value的外層JSONArray
        JSONArray inner_12 = new JSONArray(); // 內層12
        inner_12.add("20180612");
        inner_12.add("54505");
        inner_12.add("2");
 
        JSONArray inner_13 = new JSONArray(); // 內層13
        inner_13.add("20180613");
        inner_13.add("54505");
        inner_13.add("2");
 
        JSONArray inner_14 = new JSONArray(); // 內層14
        inner_14.add("20180614");
        inner_14.add("54505");
        inner_14.add("2");
 
        // 往外層JSONArray中套JSONArray
        value_out.add(inner_12);
        value_out.add(inner_13);
        value_out.add(inner_14);
 
        dataSet.put("result", value_out); // put(key1, value1)
        dataSet.put("sum", value_out); // put(key2,value2)
 
        JSONArray result = dataSet.getJSONArray("result"); // 獲取到的是二維數組,JSONArray套JSONArray
        JSONArray sum = dataSet.getJSONArray("sum");
 
        String date0 = result.getJSONArray(0).getString(0);  // 獲取第一個元素的date
 
        System.out.println(date0);
        if (!CollectionUtils.isEmpty(result)) {
            for (int i = 0; i < result.size(); i++) {
                JSONArray record = result.getJSONArray(i); // 獲取內層json數組
                String date = record.getString(0);
                System.out.println(date);
            }
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章