将JSON字符串转换为Object,其中字段可以具有两种不同的结构

时间:2017-11-07 16:51:19

标签: java json jackson

我需要使用Jackson库来解析具有特定字段"baz"的JSON对象,该字段具有两种结构的对象值。要么我属于这种情况:

{
  "foo": "...",
  "bar": "...",
  "baz": {
    "bazAttribute1": "...",
    "bazAttribute2": "...",
    "bazAttribute3": "..."
  }
}

或者我属于另一种情况:

{
  "foo": "...",
  "bar": "...",
  "baz": {
    "bazAltAttribute1": "...",
    "bazAltAttribute2": "...",
  }
}

显然,baz子对象有一个结构(在示例中,三个属性)或另一个(两个名称完全不同的属性)。

我在整个项目中使用Jackson的方式是自动编组到类,所以我通常会打电话:

ObjectMapper mapper = new ObjectMapper()
mapper.readValue(myJsonString, FooBarBaz.class)

如何设计表示存在这种双重结构的根对象的FooBarBaz类?

我正在考虑使用泛型,或者我可以让两个子对象实现一个公共接口,并在FooBarBaz中使用该接口来描述baz

我对采取何种方法使其不太费解而感到有点困惑。

1 个答案:

答案 0 :(得分:0)

试试这个。如果您的JSON字符串不包含所有这些变量,则其他变量将为null。

class FooBarBaz {
    private String foo;
    private String bar;
    private Baz baz;

    //Getter  & Setter methods
}

class Baz {
    private String bazAttribute1;
    private String bazAttribute2;
    private String bazAttribute3;
}