【问题标题】:Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token无法从 START_ARRAY 令牌中反序列化 java.util.LinkedHashMap 的实例
【发布时间】: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 的实例 令牌

【问题讨论】:

    标签: jackson deserialization objectmapper


    【解决方案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;
    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2014-06-11
    • 2020-09-23
    • 1970-01-01
    • 2016-07-30
    • 2015-03-10
    • 2019-10-25
    • 2015-12-24
    相关资源
    最近更新 更多