jackson - 无法从 START_ARRAY token 反序列化 java.util.LinkedHashMap 的实例

标签 jackson deserialization objectmapper

下面提到的是 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;
}

但得到异常(exception):

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.LinkedHashMap out of START_ARRAY token

最佳答案

您申报的属性(property)imageMaps作为 Map<String, B>在您的类(class)中,但在您的 JSON 中 imageMaps是 B 的数组。如果您更改 imageMaps,反序列化应该可以工作至 images在你的 JSON 中。

关于jackson - 无法从 START_ARRAY token 反序列化 java.util.LinkedHashMap 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021909/

相关文章:

java - 使用 Google Http Java Client 将嵌套的 JSON 节点解析为 POJO

java - 为什么我无法解开根节点并反序列化对象数组?

jackson - 如何在 Json 反序列化为 Java 对象期间跳过使用 @JsonCreator for Enums?

java - 如何为以下 json 创建 POJO?

java - 为什么 Jackson ObjectMapper 会抛出 ClassNotFoundException?

java - Spring 休息模板 : Parsing using @JsonIgnore causes values to be null

java - 读取 jackson 中的嵌入式对象

java - 使用 Kryo 序列化任意 Java 对象(获取 IllegalAccessError)

generics - 将字节数组反序列化为名称为 String 的类

java - Hibernate 序列化异常