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
9条答案
按热度按时间zaqlnxep1#
@weicao 要求data为空(不存在或者 "data":{}),输出的List data==null(或size==0)
请问,有没有选项使得忽略“can not cast to”错误?
gkl3eglg2#
看起来跟我遇到的问题类似 #1229
fquxozlt3#
data:{} 与 data ==null 可不等价。
可以试试用data:[],data:null
t3psigkw4#
Issue1227.java.txt
try this
n7taea2i5#
确实存在解析不一致,
JSON.parseObject 可以解析,但是List里是一个空的JSONObject,都是{}与[]惹的锅。
lndjwyie6#
@kiminotes json字符串是后台返回的,不可更改。
我想要:提供一个参数,发生cast异常时忽略,
这样List data就不会被赋值
deyfvvtc7#
如果是这样,说明你们后台序列化的库有bug,
建议替换成fastjson之类的,它不会把一个array序列化成{}
9jyewag08#
@kimmking 后台是php的。
如果某个函数返回为null则默认输出data:{}是允许的。
当然最好的情况是data整个都不输出
nwnhqdif9#
这个问题到现在都还是老样子吗