java - 使用 Jackson 从 JSON 树中的特定节点映射对象

标签 java json jackson

是否可以让 Jackson 的 ObjectMapper 仅从 JSON 树中的特定节点(和“向下”节点)解码?

用例是一种可扩展的文档格式。我想遍历树,然后将当前路径发布到一组可扩展的插件,以查看用户是否正在使用知道如何处理文档的那部分的插件。

我希望插件作者不必处理 JsonNode 或流式 API 的底层细节;相反,只需传递一些上下文和特定的 JsonNode,然后能够使用可爱且方便的 ObjectMapper 解码其类的实例,考虑传递的节点树的根。

最佳答案

考虑以下 JSON:

{
  "firstName": "John",
  "lastName": "Doe",
  "address": {
    "street": "21 2nd Street",
    "city": "New York",
    "postalCode": "10021-3100",
    "coordinates": {
      "latitude": 40.7250387,
      "longitude": -73.9932568
    }
  }
}

考虑到您要将 coordinates 节点解析为以下 Java 类:

public class Coordinates {

    private Double latitude;

    private Double longitude;
    
    // Default constructor, getters and setters omitted
}

为此,将整个 JSON 解析为 JsonNodeObjectMapper :

String json = "{\"firstName\":\"John\",\"lastName\":\"Doe\",\"address\":{\"street\":"
            + "\"21 2nd Street\",\"city\":\"New York\",\"postalCode\":\"10021-3100\","
            + "\"coordinates\":{\"latitude\":40.7250387,\"longitude\":-73.9932568}}}";

ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);

然后使用JSON Pointer查询 coordinates 节点并使用 ObjectMapper将其解析为 Coordinates 类:

JsonNode coordinatesNode = node.at("/address/coordinates");
Coordinates coordinates = mapper.treeToValue(coordinatesNode, Coordinates.class);

JSON Pointer是一种遍历JSON的路径语言。有关详细信息,请查看 RFC 6901 .自 2.3 版以来,它在 Jackson 中可用。

关于java - 使用 Jackson 从 JSON 树中的特定节点映射对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996485/

相关文章:

java - 如何正确地将数据添加到嵌套 HashMap

java - 使用 Jackson 将对象转换为 JSON 时的无限递归

java - 使用 Jgrasp 打印字符串列表 (Java)

java - 抽象类是否隐藏或重写了接口(interface)的方法?

javascript - Ionic/Angular,将 JSON/Array 值作为 HTML 传递

java - 运行时的通用类​​类型参数详细信息

java - Jackson Mapper 具有特殊字符 é 问题

java - 如何正确使用鼠标监听器?

java - ProcessBuilder 找不到文件?!

jquery - 自动从文本框发送输入数据