Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 如果级别未知,如何从json中提取特定的对象类型?_Java_Json_Jsonpath - Fatal编程技术网

Java 如果级别未知,如何从json中提取特定的对象类型?

Java 如果级别未知,如何从json中提取特定的对象类型?,java,json,jsonpath,Java,Json,Jsonpath,我有一个json,如下所示(这只是代表性的): 我面临的问题是Person对象在json中可以处于不同的级别。例如,在下面的情况下,RootNode1的级别为2,RootNode2的级别为1,级别为0。当然,这些级别不限于2,也不以任何方式与RootNode绑定。(这些节点值是未知的。唯一固定且唯一标识Person对象的是“Type”:“Person”) 我必须在所有情况下提取Person对象 有没有办法通过在JsonPath库中遍历来实现这一点: 是的,这是完全可能的。 如果自述文件可信,他会

我有一个json,如下所示(这只是代表性的):

我面临的问题是Person对象在json中可以处于不同的级别。例如,在下面的情况下,RootNode1的级别为2,RootNode2的级别为1,级别为0。当然,这些级别不限于2,也不以任何方式与RootNode绑定。(这些节点值是未知的。唯一固定且唯一标识Person对象的是
“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