首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从父节点创建的Jackson引用对象

从父节点创建的Jackson引用对象
EN

Stack Overflow用户
提问于 2018-06-04 00:54:03
回答 2查看 352关注 0票数 1

我有以下json格式的数据模型:

代码语言:javascript
复制
{ 
  "foo":{
    "foo_property": 1,
    "foo_property2": 2,
    "bars":[
      {"bar_property": 3},
      {"bar_property": 9},
      ...
    ]
}

我的对象模型如下:

代码语言:javascript
复制
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的对象?

EN

回答 2

Stack Overflow用户

发布于 2018-06-04 10:12:59

下一步代码工作,并在Bar字段中添加Foo引用。主类:

代码语言:javascript
复制
 String jsonString = "{...}";
        ObjectMapper objectMapper = new ObjectMapper();
        Complex complex = objectMapper.readValue(jsonString, Complex.class);

复杂类聚合Foo实例并添加对Bar的引用:

代码语言:javascript
复制
public class Complex {

    private Foo foo;

    public void setFoo(Foo foo) {
        this.foo = foo;
        for(Bar bar : foo.getBars()) {
            bar.setFoo(foo);
        }
    }
}

还需要修改Foo类:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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实例的引用。

票数 1
EN

Stack Overflow用户

发布于 2018-06-04 01:04:32

为了反序列化您的JSON,请使这些类类似于JSON。

根据JSON结构,Foo是父节点,Bar是其内的JSONArray。使用以下类,您的反序列化应该可以完美地工作。

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50668779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档