我有以下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使用从父节点创建的Foo
对象来创建Bar
的对象?
发布于 2018-06-04 10:12:59
下一步代码工作,并在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;
}
}
注意!但是更好的变种-使用内部类。然后,您可以轻松地获得对Foo实例的引用。
发布于 2018-06-04 01:04:32
为了反序列化您的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;
}
}
https://stackoverflow.com/questions/50668779
复制相似问题