第一个错误
- 调用JSON.parseArray(json, xxx.class);出错exepct '[', but {, pos 1, json!此方法要求传入一个json数组!
- 这个错误是因为你的json不是数组,解析的时候没有[]括号,比如
{"name":"张三","age":"12"}
- 才报这个错误。(此方法是解析数组的你非要传个object,肯定报错啊)
{
"timestamp": "2021-01-29T03:09:36.966+0000",
"status": 500,
"error": "Internal Server Error",
"message": "exepct '[', but string, pos 207, json : "[\r\n {\r\n \"id\": \"PT_0107130809062620001\",\r\n \"time\": \"20210129092600\",\r\n \"data\": {\r\n \"P\": 0.0,\r\n \"SOC\": \"0\"\r\n }\r\n }\r\n]"",
"path": "/staff"
}
- 案例
// 模拟自定义的请求接口
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Object CarController(@RequestBody String json) {
Object toJSON = JSON.toJSON(json);
List<Parameter> list = JSONArray.parseArray(String.valueOf(toJSON), Parameter.class);
System.out.println(JSON.toJSON(list)); //输出:[{"data":{"P":0.0,"SOC":"0"},"id":"PT_0107130809062620001","time":"20210129092600"}]
return new Return();
}
- 解决方法
- 在json参数加上[]就好了,这样是没问题的
[{"name":"张三","age":"12"}]
第二个错误
- 调用JSON.parseObject(json, xxx.class);出错syntax error, expect {, actual [, pos 0!语法错误,期望{,实际的[,pos 0!
- 这个错误是因为你的json是数组,解析的时候有[]括号,比如
[{"name":"fs","age":"12"}]
- 才报这个错误。(此方法是解析object的你非要传个数组,肯定报错啊)
- 解决方法
- 调用JSON.parseArray(json, xxx.class)即可;
- 或者说你用循环
for(int i =0;i<jsonArray.size();i++){
JSON.parseObject(json[i], xxx.class);
}
总结
- 解析Object,也就是一个JSON串。
- JSON.parseObject(json, xxx.class);
- 解析一组【数组】Object,也就是一个数组中包含N个字符串。
- JSON.parseArray(json, xxx.class);