[英]Nested JSON Mapping to Jackson where key is dynamic
I am looking to map a nested JSON structure into Jackson where the object is an object of dynamic IDs. 我正在寻求将嵌套的JSON结构映射到Jackson中,其中该对象是动态ID的对象。
{
"id1": {
"prop": true
},
"id2": {
"prop": true
},
"id3": {
"prop": true
}
}
I currently have the following Jackson POJO: 我目前有以下Jackson Jackson:
package com.uk.jacob.containerdroid;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;
public class Container {
private Map<String, ContainerDetails> properties = new HashMap<>();
public class ContainerDetails {
private boolean prop;
public boolean getProp() {
return prop;
}
public void setProp(boolean prop) {
this.prop = prop;
}
}
@JsonAnySetter
public void add(String key, ContainerDetails value) {
properties.put(key, value);
}
@JsonAnyGetter
public Map<String, ContainerDetails> getProperties() {
return properties;
}
@Override
public String toString() {
return "Containers {" +
", properties=" + properties.toString() +
'}';
}
}
Which works for data that is a static property, but not nested JSON. 适用于属于静态属性但不适用于嵌套JSON的数据。
I get the error: 我收到错误:
12-23 22:32:41.628 14098-14098/? W/System.err﹕ at [Source: { "test": { "prop": true } }; line: 1, column: 13] (through reference chain: com.uk.jacob.containerdroid.models.Container["test"])
How can I manipulate the above to map properly? 如何操纵以上内容以正确映射?
It seems you just want a Map<String, Foo>
, where Foo is defined as 似乎您只想要
Map<String, Foo>
,其中Foo被定义为
public class Foo {
private boolean prop;
// getter, setter omitted
}
Complete working example: 完整的工作示例:
import java.io.IOException;
import java.util.Map;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class Foo {
private boolean prop;
public boolean isProp() {
return prop;
}
public void setProp(boolean prop) {
this.prop = prop;
}
@Override
public String toString() {
return "Foo{" +
"prop=" + prop +
'}';
}
public static void main(String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
String json = "{ \n" +
" \"id1\": {\n" +
" \"prop\": true\n" +
" },\n" +
" \"id2\": {\n" +
" \"prop\": true\n" +
" },\n" +
" \"id3\": {\n" +
" \"prop\": true\n" +
" }\n" +
" }";
Map<String, Foo> map = mapper.readValue(json, new TypeReference<Map<String, Foo>>() {
});
System.out.println("map = " + map);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.