Java 如果级别未知,如何从json中提取特定的对象类型?
我有一个json,如下所示(这只是代表性的): 我面临的问题是Person对象在json中可以处于不同的级别。例如,在下面的情况下,RootNode1的级别为2,RootNode2的级别为1,级别为0。当然,这些级别不限于2,也不以任何方式与RootNode绑定。(这些节点值是未知的。唯一固定且唯一标识Person对象的是Java 如果级别未知,如何从json中提取特定的对象类型?,java,json,jsonpath,Java,Json,Jsonpath,我有一个json,如下所示(这只是代表性的): 我面临的问题是Person对象在json中可以处于不同的级别。例如,在下面的情况下,RootNode1的级别为2,RootNode2的级别为1,级别为0。当然,这些级别不限于2,也不以任何方式与RootNode绑定。(这些节点值是未知的。唯一固定且唯一标识Person对象的是“Type”:“Person”) 我必须在所有情况下提取Person对象 有没有办法通过在JsonPath库中遍历来实现这一点: 是的,这是完全可能的。 如果自述文件可信,他会
“Type”:“Person”
)
我必须在所有情况下提取Person对象
有没有办法通过在JsonPath库中遍历来实现这一点:
是的,这是完全可能的。
如果自述文件可信,他会
JsonPath.read(document, "$.RootNode1.ABC[1].Type");
对于RootNode1
及
对于RootNode2
及
这是我看到的唯一方法。但可能更简单,我习惯于亲自使用org.json如果我理解正确,那么这个jsonpath表达式
$..Type
应该输出
[
"Person",
"Person",
"Person"
]
无论
Type
是什么级别,正确的方法是使用以下表达式:$…[?(@.Type=='Person')]
,例如:
ptx.parse(json).read("$..[?(@.Type == 'Person')]", List.class)
// ptx is ParseContext object of com.jayway.jsonpath
有了它,我就可以获得人员列表,而不必关心人员对象的级别。谢谢。但值“RootNode1”、“ABC”不是预先知道的,我将手动编写解析器
$..Type
[
"Person",
"Person",
"Person"
]
ptx.parse(json).read("$..[?(@.Type == 'Person')]", List.class)
// ptx is ParseContext object of com.jayway.jsonpath