无法从 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&lt;String, B&gt;,但在您的JSON 中imageMaps 是一个B 数组。如果您将JSON 中的imageMaps 更改为images,反序列化应该可以工作。

【讨论】:

我没有控制 json 字符串。不过我可以改变类的结构。 在这种情况下,请尝试将 private Map&lt;String, B&gt; imageMaps; 更改为 private List&lt;B&gt; 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的实例

无法从START_ARRAY标记中反序列化contactupload.User的实例

无法从 Spring Webservice 中的 START_ARRAY 令牌反序列化对象实例