访问JSON属性两次
问题描述:
考虑以下json
文件:访问JSON属性两次
{
"a": {
"one": "1",
"two": "2"
},
"b": {
"three": "3",
"four": "4",
}
}
我需要把它deserizlize到下面的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;
}
它看起来像嵌套节点(a
和b
)只能在mapper.readValue
期间仅被遍历一次。杰克逊只填写node1
,如果我从node2
删除@JsonAlias({"a","b"})
,并且如果我从node1
删除@JsonAlias({"a","b"})
,则只删除node2
。
如果我在两者上留下注释,则只有其中一个填充。
是否支持该映射?如果没有,解决方法是什么?
我使用的是杰克逊2.9.1
答
@JsonAlias
仅适用于注解的字段直接,你的情况node1
,node2
。它不会导致杰克逊在Node1
和Node2
类中寻找字段。例如,在解析类Node1
的对象时,无论使用何种别名,它都会显示字段one
和three
,并且无法找到两者。我推荐这组注释:
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文档。
谢谢,@ manos-nikolaidis,但我的用例比我描述的更复杂。我最终在中间转换[jolt](https://github.com/bazaarvoice/jolt),然后用jackson将转换后的对象读入Root对象。再次感谢您的回答。 –