jackson json反序列化器,带有子节点元素列表

时间:2018-04-27 12:13:15

标签: json jackson jackson-databind

我有MyObject的反序列化程序,它扩展了StdDeserializer<MyObject>。在其deserialize(JsonParser p, DeserializationContext ctxt)中,我想将我反序列化的节点的子节点转换为pojos列表。鉴于json喜欢

{
  "property1" : "value1",
  ...
  "subnode" : [
    {
      "snProperty1" : "value1",
      "snProperty2" : "value2",
      ...
      "snPropertyN" : "valueN"
    },
    { ... }, // other elements like the one above
    { ... }
 ],
  ...
}

和pojos

class Subnode {
    private String snProperty1;
    private String snProperty2;
    ...
    private Stirng snPropertyN;
    // getters and setters
}

class MyObject {
    private String property1;
    ...
    private List<Subnode> subnodes;
    // getters and setters
}

我希望反序列化器能够处理所有Subnode个对象,而无需自己迭代和使用Subnode setter。与TypeReferenceObjectMapper类似的内容。

实例化ObjectMapper以实现上述目标的唯一方法是什么?例如

objectMapper.convertValue(subnode, new TypeReference<List<Subnode>>() {});

1 个答案:

答案 0 :(得分:0)

我使用解析器(ObjectMapper)编解码器在不使用p的情况下解决了这个问题。

List<Subnode> subnodes = new ArrayList<>();
if (myObject.hasNonNull("subnodeList")) {
    ObjectCodec codec = p.getCodec();
    for (JsonNode subnode : myObject.get("subnodeList")) {
        subnodes.add(codec.treeToValue(subnode, Subnode.class));
    }
}
myObject.setSubnodes(subnodes);