是否可以让 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 解析为 JsonNode
与 ObjectMapper
:
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/