fastjson JSON.parseObject(json, class)和jsonObject.toJavaObject(class)结果不一致,并且都是错误的

tzxcd3kk  于 2022-10-22  发布在  SEO
关注(0)|答案(9)|浏览(545)
compile 'com.alibaba:fastjson:1.2.31'
compile 'com.alibaba:fastjson:1.1.57.android'

有如下json字符串和类:

String t2 = "{\"state\":2,\"msg\":\"msg2222\",\"data\":{}}";
    public static class Test {
        public int state;
        public String msg;
        public List<Data> data;
        public static class Data {
            public int d1;
            public String d2;
        }
    }

测试代码如下:

try {
            Test c2 = JSON.parseObject(t2, Test.class);
            Log.d("JSON", "c2 ----");
            com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(t2);
            Test model = jsonObject.toJavaObject(Test.class);
            Log.d("JSON", "model ----");
        } catch ( Exception e) {
            e.printStackTrace();
        }

c2可以格式化出结果,但结果是错误的,
c2 = {MainActivity$Test@830029442312}

data = {ArrayList@830029442520} size = 1

0 = {MainActivity$Test$Data@830029442600}
d2 = null
d1 = 0
msg = "msg2222"
state = 2
model执行出现异常
e = {JSONException@830029375048} "com.alibaba.fastjson.JSONException: can not cast to : java.util.List<com.yyw.fastjson_example.MainActivity$Test$Data>"
cause = {JSONException@830029373272} "com.alibaba.fastjson.JSONException: can not cast to : java.util.List<com.yyw.fastjson_example.MainActivity$Test$Data>"
detailMessage = "can not cast to : java.util.List<com.yyw.fastjson_example.MainActivity$Test$Data>"
stackState = {int[38]@830029375080}
stackTrace = {StackTraceElement[0]@830024963328}
suppressedExceptions = {Collections$EmptyList@830024961208} size = 0

zaqlnxep

zaqlnxep1#

@weicao 要求data为空(不存在或者 "data":{}),输出的List data==null(或size==0)
请问,有没有选项使得忽略“can not cast to”错误?

gkl3eglg

gkl3eglg2#

看起来跟我遇到的问题类似 #1229

fquxozlt

fquxozlt3#

data:{} 与 data ==null 可不等价。
可以试试用data:[],data:null

n7taea2i

n7taea2i5#

确实存在解析不一致,
JSON.parseObject 可以解析,但是List里是一个空的JSONObject,都是{}与[]惹的锅。

lndjwyie

lndjwyie6#

@kiminotes json字符串是后台返回的,不可更改。
我想要:提供一个参数,发生cast异常时忽略,
这样List data就不会被赋值

deyfvvtc

deyfvvtc7#

如果是这样,说明你们后台序列化的库有bug,
建议替换成fastjson之类的,它不会把一个array序列化成{}

9jyewag0

9jyewag08#

@kimmking 后台是php的。
如果某个函数返回为null则默认输出data:{}是允许的。
当然最好的情况是data整个都不输出

nwnhqdif

nwnhqdif9#

这个问题到现在都还是老样子吗

相关问题