我有一个json,如下图所示(这只是代表)。
我面临的问题是,Person对象可以在json中处于不同的级别。例如,在下面的例子中,如果是RootNode1,它在第2层,如果是RootNode2,它在第1层,而在第0层。当然这些级别并不限于2,也不以任何方式与RootNode绑定。(而且这些节点的值也不是预先知道的。) 唯一固定和唯一的识别Person对象的东西是 "Type": "Person"
)
我必须在所有情况下提取Person对象。
有没有一种方法可以通过JsonPath库中的遍历来实现。https:/github.comjson-pathJsonPath。?
[
{
"RootNode1": [
{
"ABC": [
{
"DEF": ""
},
{
"Name": "John",
"Type": "Person"
....
}
]
},
{
"DAC": {}
}
]
},
{
"RootNode2": [
{
"Name": "Williams",
"Type": "Person"
....
}
]
},
{
{
"Name": "Sam",
"Type": "Person"
....
}
}
]
是的,这是完全可能的。如果readme是可信的,他使
JsonPath.read(document, "$.RootNode1.ABC[1].Type");
对于RootNode1
还有
JsonPath.read(document, "$.RootNode2[1].Type");
对于RootNode2
还有
JsonPath.read(document, "$.Type");
但可能还有更简单的,我个人习惯用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
有了这个,我就可以得到List of persons,而不需要关心Person对象存在的级别。