expect ‘:‘ at 0, actual =] with root
原创
©著作权归作者所有:来自51CTO博客作者HezhezhiyuLe的原创作品,请联系作者获取转载授权,否则将追究法律责任
前言
转换一个JSON数组报错
15:58 ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.fastjson.JSONException: expect ':' at 0, actual =] with root cause
com.alibaba.fastjson.JSONException: expect ':' at 0, actual =
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:302)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:1144)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:1149)
at com.alibaba.fastjson.parser.deserializer.MapDeserializer.deserialze(MapDeserializer.java:23)
at com.alibaba.fastjson.parser.deserializer.ContextObjectDeserializer.deserialze(ContextObjectDeserializer.java:9)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:787)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:721)
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:716)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:627)
at com.alibaba.fastjson.JSON.parseArray(JSON.java:607)
参数
[
{"a":null,
"b":"1",
"c":[1,2,3]
},
{"a":null,
"b":"1",
"c":[4,5,6]
}
]
原因
后端接收时为Object 形式直接data.toString()
转换是错误的
List<JSONObject> models = JSONObject.parseArray(data.toString(), JSONObject.class);
正确做法
String str = JSONObject.toJSONString(data);
List<JSONObject> models = JSONObject.parseArray(str, JSONObject.class);
先转换为JSON字符串,再转换为数组
后端接收json对象时,会转换为{a=null,...}
这种形式
我们需要的是{a:null}
这种形式
形式冲突
参考文章:给了启发