Jackson将JSON解析为Map <string,typea =“”> </string,>

时间:2015-01-09 09:25:18

标签: java json dictionary jackson deserialization

我有以下JSON:

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

我想解析&#34;数据&#34;与杰克逊成为一个对象。如果我将其解析为Map<String, Object>它运作良好,而&#34; 1&#34;,&#34; 2&#34; (...)用作Key,各自的数据作为值,再次用Map表示。

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

有人可以给我一个提示吗? 我总是收到以下错误:

  

无法读取JSON:找不到类型为[simple]的合适构造函数   type,class TypeA]:无法从JSON对象实例化(需要   添加/启用类型信息?)

提前多多谢谢,
tohoe

1 个答案:

答案 0 :(得分:1)

以下内容适合您。

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);