使用Jackson将复杂的JSON转换为一级POJO



让我们假设您有以下JSON:

{
  "prop0": "value0",
  "level1" : {
      "prop1": "value1"
      "prop2": "value2"
   },
   ....
}

它能变成简单的Java对象吗?

class Pojo {
  private String prop0;
  private String prop1;
  private String prop2;
}

我不想创建一个中间类来包装"level1"。

我想到的是用这种方式绘制我的班级地图:

class Pojo {
  private String prop0;
  @JsonProperty("level1.prop1")
  private String prop1;
  @JsonProperty("level1.prop2")
  private String prop2;
}

但不幸的是,它不起作用。相反的问题——将复杂的Java对象转换为普通的JSON——可以使用@JsonUnwrapped注释简单地解决。

你能为我的问题提出可行的解决方案吗?

您需要编写一个自定义的反序列化程序,或者添加一个可以转换结构的setter。对于后者,你可以做一些类似的事情

...
public void setLevel1(Map<String,String> values) { // or JsonNode
   prop1 = values.get("prop1");
   // and so forth; if names are regular, can use looping
}

最新更新