调用API获取数据时遇JSON解析错误:无法反序列化[xxx.Class;类型
JSON反序列化错误解决方案
问题核心
错误JSON parse error: Cannot deserialize value of type [xxx.Class; from Object value (token JsonToken.START_OBJECT)本质是数据结构不匹配:
- 你的代码预期接收数组类型的返回值
- 但实际API返回的是单个JSON对象(而非数组)
修复方案
根据你期望得到数组结果的需求,有两种可行处理方式:
方式1:调整API返回格式(若有权限修改API)
要求API返回数组结构,哪怕只有一条数据也要用数组包裹,示例格式:
[ { "字段1": "值1", "字段2": "值2" } ]
方式2:修改本地代码接收逻辑
如果无法调整API,就把代码里的接收类型从数组改为单个对象,之后手动包装成数组:
比如原代码如果是:
xxx.Class[] result = restTemplate.getForObject(apiUrl, xxx.Class[].class);
改成:
// 先接收单个对象 xxx.Class singleData = restTemplate.getForObject(apiUrl, xxx.Class.class); // 手动包装成数组 xxx.Class[] result = new xxx.Class[]{singleData};
也可以用JSON工具类手动转换:
// 先获取原始响应字符串 String rawResponse = restTemplate.getForObject(apiUrl, String.class); // 把单个对象字符串包裹成数组格式 String arrayFormatResponse = "[" + rawResponse + "]"; // 反序列化为数组 xxx.Class[] result = new ObjectMapper().readValue(arrayFormatResponse, xxx.Class[].class);
验证步骤
- 调用API时先打印原始返回的JSON字符串,确认是单个对象还是数组
- 确保代码接收类型和API返回的JSON结构完全对应
内容的提问来源于stack exchange,提问作者Alejandro Veitia Ramos
相关产品推荐
相关产品推荐

