fastjson 空数组,size不一致的问题

tp5buhyn  于 3个月前  发布在  其他
关注(0)|答案(1)|浏览(85)

测试的代码如下:

TestBean testBean1 = JSONObject.parseObject("{\"code\":\"200\",\"list\":{}}", TestBean.class);
        
System.out.println(testBean1.list.size());
       
TestBean testBean2 = JSONObject.parseObject("{\"code\":\"200\",\"list\":[]}", TestBean.class);
        
System.out.println(testBean2.list.size());

list解析的正常应该是数组,但是数据源在为空的时候返回的结果有两种情况{}或者[],但是它俩的解析结果不一样。

测试结果:

1
0
Process finished with exit code 0

测试的bean
TestBean:

public class TestBean {

    public int code;

    public List<TestInnerBean> list;
}

TestInnerBea:

public class TestInnerBean {

    public String title;

    public int age;
}

用的是1.2.47版本
能不能空的时候size都是0?

axkjgtzd

axkjgtzd1#

import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.DefaultJSONParser;
import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
import com.alibaba.fastjson.util.TypeUtils;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

public class TestListDeserializer implements ObjectDeserializer {
    @Override
    public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
        // 获取 list 字段的值
        Object listValue = TypeUtils.cast(parser.parse(), type);
        
        // 如果 listValue 为空对象或空数组,则返回一个空的 List
        if (listValue == null || (listValue instanceof List && ((List<?>) listValue).isEmpty())) {
            return (T) new ArrayList<>();
        }
        
        // 否则,返回原始值
        return (T) listValue;
    }

    @Override
    public int getFastMatchToken() {
        // 返回 JSONToken 的值,指示此反序列化器适用于哪种类型的字段
        return 0;
    }
}

public class TestBean {

    public int code;

    // 使用自定义反序列化器
    @JSONField(deserializeUsing = TestListDeserializer.class)
    public List<TestInnerBean> list;
}

public class TestInnerBean {

    public String title;

    public int age;
}

相关问题