有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

有没有可能让Jackson的ObjectMapper只从JSON树中的特定节点(和“向下”)解组

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

我希望插件作者不必处理JsonNode或流式API的低级细节;相反,只需传递一些上下文和一个特定的JsonNode,然后就可以使用可爱而方便的ObjectMapper来解组它们类的一个实例,将节点作为树的根传递


共 (1) 个答案

  1. # 1 楼答案

    考虑以下JSON:

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

    并考虑将解析{{CD1>}节点解析为以下java类:

    public class Coordinates {
    
        private Double latitude;
    
        private Double longitude;
        
        // Default constructor, getters and setters omitted
    }
    

    为此,将整个JSON解析为带有^{}^{}

    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节点,并使用^{}将其解析为Coordinates类:

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

    JSON指针是一种遍历JSON的路径语言。有关更多详细信息,请查看RFC 6901。它从2.3版开始在Jackson中提供