Jackson 将 JSON 解析为 Map<String, TypeA>

Jackson parse JSON to Map<String, TypeA>

我有以下 JSON:

{  
    "data": {  
        "1": {  
            "id":"1",  
            "name":"test1"  
         },  
        "2": {   
            "id":"2",  
            "name":"test2"  
         }  
    }  
}  

我想用 Jackson 将 "data" 解析为对象。如果我将其解析为 Map<String, Object>,则效果很好,而“1”、“2”(...) 用作键,相应的数据作为值,再次由 Map 表示。

现在我想将此 JSON 解析为 Map<String, TypeA> 而 class TypeA 将有两个字段,id 和 name。

有人可以提示我该怎么做吗? 我总是收到以下错误:

Could not read JSON: No suitable constructor found for type [simple type, class TypeA]: can not instantiate from JSON object (need to add/enable type information?)

非常感谢,
托霍

以下内容应该适合您。

public class MyDataObject {
    private final Map<String, TypeA> data;

    @JsonCreator
    public MyDataObject(@JsonProperty("data") final Map<String, TypeA> data) {
        this.data = data;
    }

    public Map<String, TypeA> getData() {
        return data;
    }
}

public class TypeA {
    private final String id;
    private final String name;

    @JsonCreator
    public TypeA(@JsonProperty("id") final String id, 
                 @JsonProperty("name") String name) {

        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}

@JsonCreator 用于描述如何创建对象以及属性名称 @JsonProperty。即使它们是嵌套的。

反序列化整个东西:

ObjectMapper mapper = new ObjectMapper();
final MyDataObject myDataObject = mapper.readValue(json, MyDataObject.class);