第一個錯誤
- 調用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);