无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例
Posted
技术标签:
【中文标题】无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例【英文标题】:Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token 【发布时间】:2018-12-03 22:29:04 【问题描述】:下面提到的是JSON字符串,resultString:
"imageMaps": [
"crc": "c2c4",
"flags": "0",
"length": "117384",
"index": 1,
"version": "1.1.90ea",
"status": ""
,
"crc": "7601",
"flags": "8",
"length": "117592",
"index": 2,
"version": "1.1.90ed",
"status": ""
],
"complete": true,
"nextBootImageVersion": "",
"lastKnownGoodImageVersion": "1.1.90ed",
"runningImageVersion": "1.1.90ed"
我想把同样的转换成A类的对象:
public class A
private boolean complete;
private String message;
private String lastKnownGoodImageVersion;
private String nextBootImageVersion;
private String runningImageVersion;
private Map<String, B> imageMaps;
private List<B> images;
private MacID macId;
我正在尝试使用代码将 json 转换为 A 类的对象:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
A a = objectMapper.readValue(resultString, A.class);
B 类代码为:
public static class B
public String version;
public int flags;
public int crc;
public long length;
public String index;
public String status;
但是得到了异常:
com.fasterxml.jackson.databind.JsonMappingException: 不能 从 START_ARRAY 中反序列化 java.util.LinkedHashMap 的实例 令牌
【问题讨论】:
【参考方案1】:您在类中将属性imageMaps
声明为Map<String, B>
,但在您的JSON 中imageMaps
是一个B 数组。如果您将JSON 中的imageMaps
更改为images
,反序列化应该可以工作。
【讨论】:
我没有控制 json 字符串。不过我可以改变类的结构。 在这种情况下,请尝试将private Map<String, B> imageMaps;
更改为 private List<B> imageMaps;
以上是关于无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例的主要内容,如果未能解决你的问题,请参考以下文章
无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例
Jackson 错误:无法从 START_ARRAY 令牌中反序列化 `java.lang.String` 的实例
如何解决错误:无效的 JSON 输入:无法从 START_ARRAY 令牌中反序列化 Topic 实例
com.fasterxml.jackson.databind.exc.MismatchedInputException:无法从START_ARRAY令牌中反序列化Object的实例