在 Java 中使用 Jackson 解包嵌套的 JSON 值的最简洁方法是什么?

问题描述

我有一个看起来像这样的 JSON(为了举例,字段数量大大减少):

{
  "content": {
    "id": {"content": "1"},"param1": {"content": "A"},"param2": {"content": "55"}
  }
}

请记住,我无法控制它,也无法更改它,这就是我从 API 中获得的。

我为此创建了一个 POJO 类,如下所示:

public class PojoClass {
  private String id;
  private String param1;
  private String param2;

  // getters and setters
}

然后我用 Jackson 解析 JSON(我必须使用它,请不要建议 GSON 或其他):

ObjectMapper om = new ObjectMapper();
JsonNode jsonNode = om.readTree(json).get("content");
PojoClass table = om.readValue(jsonNode.toString(),PojoClass.class);

这行不通,因为 id、param1 和 param2 中包含 JSON,而不是直接值。该代码在 JSON 中运行良好,如下所示:

{
  "content": {
    "id": "1","param1": "A","param2": "55"
  }
}

但不幸的是,我需要的值存储在“内容”字段下。

解决此问题的最简洁方法是什么?

我知道我可以对此进行硬编码并在构造函数或其他东西中将所有值一个一个提取到变量中,但是它们有很多,而不是像本示例中的 3 个,显然这不是正确的方法.

解决方法

您可以将 json 字符串中的 JsonNode 元素(如 "id": {"content": "1"})修改为 {"id": "1"},使用迭代器将它们作为 ObjectNode 元素访问,然后反序列化获得的新 json {{ 1}} 如下所示:

{"id":"1","param1":"A","param2":"55"}