前言

转换一个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}​​​这种形式
形式冲突

​​参考文章:给了启发​​