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);
我有以下 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);