Java 如何将动态JSON属性映射到固定的POJO字段

Java 如何将动态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

我有一些json要解析成pojo

{
  "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]]]]