Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson从JSON树中的特定节点映射对象_Java_Json_Jackson - Fatal编程技术网

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

Java 使用Jackson从JSON树中的特定节点映射对象,java,json,jackson,Java,Json,Jackson,是否可以让Jackson的ObjectMapper仅从JSON树中的特定节点(和“向下”)解组 用例是一种可扩展的文档格式。我想遍历这棵树,然后将当前路径发布到一组可扩展的插件,以查看用户是否正在使用和插件,这些插件知道如何处理文档的这一部分 我希望插件作者不必处理JsonNode或流式API的低级细节;相反,只需传递一些上下文和特定的JsonNode,然后就可以使用可爱而方便的ObjectMapper来解组其类的实例,将节点作为树的根进行传递。考虑以下JSON: { “名字”:“约翰”, “姓

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

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


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

考虑以下JSON:

{
“名字”:“约翰”,
“姓氏”:“能源部”,
“地址”:{
“街道”:“第二街21号”,
“城市”:“纽约”,
“postalCode”:“10021-3100”,
“坐标”:{
“纬度”:40.7250387,
“经度”:-73.9932568
}
}
}

并考虑将“代码>坐标”//COD>节点解析为以下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号”“纽约市”“邮政编码”“10021-3100”“,”
+“\”坐标\“:{\”纬度\“:40.7250387,\”经度\“:-73.9932568}}”;
ObjectMapper mapper=新的ObjectMapper();
JsonNode=mapper.readTree(json);
然后使用查询
坐标
节点,并使用将其解析为
坐标
类:

JsonNode coordinates node=node.at(“/address/coordinates”);
坐标坐标=mapper.treeToValue(Coordinates节点,Coordinates.class);

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

听起来就像这样:这正是我想要的!一旦我有机会实施赏金,我就会奖励它。我会说,
node.get(“address”)
对于这种情况更简单/更有效。@shmosel当然是这样。但这里的要点是可用于查询节点的JSON路径。我提供的JSON示例非常简单,我们看不到使用JSON路径的优势。@CássioMazzochiMolin,哦,我没有意识到这是一个人为的示例。答案更新为一个稍微复杂的示例。