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

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 } 

为此,使用ObjectMapper将整个JSON解析为JsonNode

 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指针是一种遍历JSON的路径语言。 有关更多详细信息,请查看RFC 6901 。 自版本2.3以来,它在Jackson中可用。