两次访问json属性

时间:2017-10-15 10:54:34

标签: json jackson jackson2 jackson-databind

考虑以下json文档:

{
  "a": {
    "one": "1",
    "two": "2"
  },
  "b": {
    "three": "3",
    "four": "4",
  }
}

我需要将其解除以下POJO:

class Root{

 @JsonAlias({"a","b"})
 Node1 node1;

 @JsonAlias({"a","b"})
 Node2 node2;
}

class Node1 {
 String one;
 String three;
}
class Node2 {
 String two;
 String four;
}

看起来嵌套节点(ab)只能在mapper.readValue期间遍历一次。如果我从node1删除@JsonAlias({"a","b"}),并且node2node2删除@JsonAlias({"a","b"}),则杰克逊仅填充node1

如果我在两者上留下注释,则只会填充其中一个。

是否支持此映射?如果没有,那么解决方法应该是什么?

我使用的是杰克逊2.9.1

1 个答案:

答案 0 :(得分:1)

@JsonAlias仅适用于带注释的字段,例如node1node2。它不会导致杰克逊在Node1Node2类中查找字段。例如,在解析类Node1的对象时,无论使用何种别名,它都会期望字段onethree,并且无法找到它们。我推荐这套注释:

class Root {
    @JsonAlias("a")
    Node1 node1;

    @JsonAlias("b")
    Node2 node2;
}

class Node1 {
    String one;

    @JsonAlias("two")
    String three;
}

class Node2 {
    @JsonAlias("three")
    String two;

    String four;
}

然后你可以在你的问题中解析JSON文档。