我有以下json格式的数据模型:
{
"foo":{
"foo_property": 1,
"foo_property2": 2,
"bars":[
{"bar_property": 3},
{"bar_property": 9},
...
]
}
我的对象模型如下:
public class Foo{
private int foo_property;
private int foo_property2;
}
public class Bar{
private Foo foo;
private int bar_property;
public Bar(Foo foo){
this.foo = foo;
}
}
在反序列化json结构时,如何告诉Jackson使用父节点中创建的Bar
对象创建Foo
个对象?
答案 0 :(得分:1)
下一代码可以在Bar字段中使用并添加Foo引用。 主要课程:
String jsonString = "{...}";
ObjectMapper objectMapper = new ObjectMapper();
Complex complex = objectMapper.readValue(jsonString, Complex.class);
复杂类聚合Foo实例并添加对Bar的引用:
public class Complex {
private Foo foo;
public void setFoo(Foo foo) {
this.foo = foo;
for(Bar bar : foo.getBars()) {
bar.setFoo(foo);
}
}
}
还需要改变Foo类:
public class Foo {
private int foo_property;
private int foo_property2;
private List<Bar> bars;
public Foo() {;
}
public void setBars(List<Bar> bars) {
this.bars = bars;
}
public List<Bar> getBars() {
return bars;
}
public void setFoo_property(int foo_property) {
this.foo_property = foo_property;
}
public void setFoo_property2(int foo_property2) {
this.foo_property2 = foo_property2;
}
}
和Bar课程:
public class Bar {
private Foo foo;
private int bar_property;
public Bar() {
}
public void setFoo(Foo foo) {
this.foo = foo;
}
public void setBar_property(int bar_property) {
this.bar_property = bar_property;
}
}
NB!但更好的变体 - 使用内部阶级。然后,您可以轻松获得对Foo实例的引用。
答案 1 :(得分:0)
为了反序列化您的JSON,请使类与JSON类似。
根据JSON结构,Foo
是父节点,Bar
是其中的JSONArray。使用以下类,您的反序列化应该完美。
public class Foo{
private int foo_property;
private int foo_property2;
private List<Bar> bars;
}
public class Bar{
private int bar_property;
public Bar(Foo foo){
this.foo = foo;
}
}