JSONObject.parseArray(String text);和jsonObj.getJSONArray(String key);的区别

本文探讨了在使用阿里巴巴的Fastjson库解析包含复杂Json结构的数据时遇到的问题。通过示例展示了如何从Json对象中获取并转换`details`字段到`Discount`类的列表。对比了两种不同的转换方法:直接转换与先转换为`JSONObject`再转换。内容强调了Json的灵活性及其在数据扩展中的优势,并提供了相应的测试用例进行说明。
摘要由CSDN通过智能技术生成

众所周知,Json这种数据结构非常灵活,可扩展性强,可编辑性也强。
尤其是有一些有关属性的字段,比如同样作为打折方式,部分产品是满减,部分产品是百分比折扣,将来还可以裂变成更灵活的打折方式,那么在设计字段时,可以用一个json表示其打折方式,不用添加字段来表示新的打折方式。

但是在从数据中取出json字段并处理的时候,发现了一个问题,数据表如下:
表示的意思是,

{
    "mode":"满减打折",
    "details":[
        {
            "order":0,
            "discountPercent":10,
            "min":0,
            "max":100
        },
        {
            "order":1,
            "discountPercent":15,
            "min":100,
            "max":500
        }
    ]
}

使用的JSON工具包依赖如下:
阿里巴巴的包,挺好用的,功能很强大

"com.alibaba:fastjson:1.2.68"

JOPO类:

import lombok.Data;

/**
 * @Author: caicai
 * @Date: 2022/3/1 下午5:02
 */
@Data
public class Discount {

    private String mode;

    private Integer order;

    private Integer discountDiscount;

    private Integer min;

    private Integer max;
}

用法

使用方法如下:

@Test
    public void test1(){
        String text = "{\"mode\":\"满减打折\",\"details\":[{\"order\":0,\"discountPercent\":10,\"min\":0,\"max\":100},{\"order\":1,\"discountPercent\":15,\"min\":100,\"max\":500}]}";
        JSONObject jsonObject = JSONObject.parseObject(text);
        String arrayStr = jsonObject.getString("details");
        List<Discount> list = JSONObject.parseArray(arrayStr,Discount.class);
        for(Discount discount:list){
            System.out.println(discount.toString()+"-------------");
        }
    }

    @Test
    public void test2(){
        String text = "{\"mode\":\"满减打折\",\"details\":[{\"order\":0,\"discountPercent\":10,\"min\":0,\"max\":100},{\"order\":1,\"discountPercent\":15,\"min\":100,\"max\":500}]}";
        JSONObject jsonObject = JSONObject.parseObject(text);
        JSONArray jsonArray = jsonObject.getJSONArray("details");
        for(int i = 0; i< jsonArray.size(); i++){
            // 写法一:
            // Discount discount = (Discount) jsonArray.get(i);
            // 写法二:
            JSONObject json = jsonArray.getJSONObject(i);
            Discount discount = json.toJavaObject(Discount.class);
            System.out.println(discount.toString()+"------------------");
        }
    }

区别

parseArray("[{},{}]")

parseArray是一个静态方法,传入一个字符串,Api提供专门的解析器对字符串进行解析,并且,解析的内容一定要是jsonArray结构,既[{“key”:“value”},{“key”:“value”}],如果字符串的结构错误,解析时会报错。
在这里插入图片描述

getJSONArray(“listName”)

getJSONArray是JSONObject对象的一个成员方法,已经有一个对象了,这个对象内置的是一个map,当这个对象被初始化的时候,内部的map数据结构已经形成,而getJSONArray方法是根据key去一个数据结构为JSONArray的value。

在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值