Java 如何将动态JSON属性映射到固定的POJO字段
我有一些json要解析成pojoJava 如何将动态JSON属性映射到固定的POJO字段,java,json,jackson,json-deserialization,Java,Json,Jackson,Json Deserialization,我有一些json要解析成pojo { "groups": [ { "g1": [ 1,2,5,6,7 ] }, { "g2": [ 2,3,48,79 ] } ] } 当然,g1和g2是标识符,所以我认为pojo应该是这样的 class Container { List<Group> gro
{
"groups": [
{
"g1": [
1,2,5,6,7
]
},
{
"g2": [
2,3,48,79
]
}
]
}
当然,g1
和g2
是标识符,所以我认为pojo应该是这样的
class Container {
List<Group> groups;
}
class Group {
String id;
List<Integer> values;
}
类容器{
列出小组;
}
班级{
字符串id;
列表值;
}
因此,它归结为一个问题:如何使用jackson将json属性映射到pojo?这种结构可以使用添加了JsonDeserialize注释的自定义反序列化程序进行解析 波乔 输出
Container [groups=[Group [id=g1, values=[1, 2, 5, 6, 7]], Group [id=g2, values=[2, 3, 48, 79]]]]
你可以使用像GSON或Jackson这样的框架来为你做这件事。是的,基本上我只是为此编写了一个简单的Jackson包装器,但对“属性名被滥用为标识符”感到困惑issue@mrhobo谢谢。我已经回答了这个问题,并不像人们想象的那么简单,问题是字段名是动态的,但是尝试映射到固定POJO…是的,谢谢。至少,我正朝着正确的方向前进,使用一个自定义反序列化程序。。。
public static class CustomDeserializer extends JsonDeserializer<Group> {
@Override
public Group deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
Group group = new Group();
ObjectNode objectNode = new ObjectMapper().readTree(jp);
// assume only a single field...
Entry<String, JsonNode> field = objectNode.fields().next();
group.id = field.getKey();
// there might be a nicer way to do this...
group.values = new ArrayList<Integer>();
for (JsonNode node : ((ArrayNode)field.getValue())) {
group.values.add(node.asInt());
}
return group;
}
}
public static void main(String[] args) throws Exception {
String json = "{\"groups\": [{\"g1\":[1,2,5,6,7]},{\"g2\": [2,3,48,79]}]}";
JsonFactory f = new JsonFactory();
JsonParser jp = f.createParser(json);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.readValue(jp, Container.class));
}
Container [groups=[Group [id=g1, values=[1, 2, 5, 6, 7]], Group [id=g2, values=[2, 3, 48, 79]]]]