无法将START_ARRAY令牌反序列化为java.util.LinkedHashMap实例

8
下面是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的对象,使用以下代码: ```java ```
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个回答

8

您在类中将属性imageMaps声明为Map<String, B>,但是在您的JSON中,imageMaps是一个B数组。如果您将JSON中的imageMaps更改为images,则反序列化应该可以工作。


我无法控制JSON字符串。但我可以更改类的结构。 - Random Coder
在这种情况下,请尝试将 private Map<String, B> imageMaps; 更改为 private List<B> imageMaps; - Konrad Botor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接