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

在项目中遇到一个JSONObject,其value是JSONArray嵌套的JSONArray,导致按照常规方式无法正确取出值。通过断点调试发现,原本的JSONObject的value是一个二维数组,而自己构造的数据只有一层JSONArray。解决方法是理解JSONArray可以作为键值对的value,并根据实际结构进行数据构造和解析。最后,代码示例展示了如何正确处理这种情况。
部署运行你感兴趣的模型镜像

项目中有如下一个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);
            }
        }
    }
}

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值