项目中解析JSONObject遇到的一个问题-value是JSONArray嵌套JSONArrray

项目中有如下一个JSONObject, 如何取出“20180612”

项目中用的alibaba的fastjson

项目中解析JSONObject遇到的一个问题-value是JSONArray嵌套JSONArrray_第1张图片

项目中取的方法如下所示

项目中解析JSONObject遇到的一个问题-value是JSONArray嵌套JSONArrray_第2张图片

然后我就试图自己构造这个dataSet,构造完之后就开始取date

下图中倒数第二行可以取出来,但是照着上面的方法写,也就是倒数第一行所示

JSONArray arr0 = result.getJSONArray(0);​

这行代码会意外中断

项目中解析JSONObject遇到的一个问题-value是JSONArray嵌套JSONArrray_第3张图片

好一会我都意识不到最后一行代码的写法为啥项目中能取到,我的就取不到

然后我就通过断点看了一下json结构,红框框处的地方显示出两者的不同

项目中value下面还有一级,而我构造的这个就没有

项目中的value相当于JSONArray套JSONArray

而我构造的value相当于value就是一层JSONArray

项目中解析JSONObject遇到的一个问题-value是JSONArray嵌套JSONArrray_第4张图片

然后我就意识到项目中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);
            }
        }
    }
}

你可能感兴趣的:(program,language)