Java 根据子元素条件使用jsonpath获取根元素

Java 根据子元素条件使用jsonpath获取根元素,java,jsonpath,json-path-expression,Java,Jsonpath,Json Path Expression,我正在使用Jayway JsonPath库从下面的JSON获取正确的“id”,其中我的phoneNumbers类型是“iPhone” 通常,我想知道当子JSON对象中指定了特定条件时,如何从块的根元素中查找内容 我尝试了以下表达式,分别选择与iPhone类型关联的块和id列表,但我无法找到属于JSON对象的根元素id,其中我的电话类型是iPhone。有人能指引我吗?对于这个问题,我需要将id设为1 要获取id列表,请执行以下操作:$[*].id 要获取与iPhone类型对应的json对象:$[*

我正在使用Jayway JsonPath库从下面的JSON获取正确的“id”,其中我的
phoneNumbers
类型是“iPhone”

通常,我想知道当子JSON对象中指定了特定条件时,如何从块的根元素中查找内容

我尝试了以下表达式,分别选择与iPhone类型关联的块和id列表,但我无法找到属于JSON对象的根元素
id
,其中我的电话类型是iPhone。有人能指引我吗?对于这个问题,我需要将
id
设为1

要获取id列表,请执行以下操作:
$[*].id

要获取与iPhone类型对应的json对象:
$[*].phoneNumber[?(@.type=='iPhone')]


我想你想让你的表情看起来更深刻

首先,在电话号码列表中找到有iPhone的对象。然后只需选择ID

试试
$[?(@.phoneNumbers[*].type==“iPhone”)].id


编辑

看起来这个库(我想您正在使用它)支持许多函数。它没有列出
contains()
,但您可以尝试使用
anyof
运算符:

$[?(@.phoneNumbers[*]。键入anyof[“iPhone”])。id


请注意,这肯定是特定于实现的,可能不会与任何其他库一起使用。

我认为您希望表达式更深入

首先,在电话号码列表中找到有iPhone的对象。然后只需选择ID

试试
$[?(@.phoneNumbers[*].type==“iPhone”)].id


编辑

看起来这个库(我想您正在使用它)支持许多函数。它没有列出
contains()
,但您可以尝试使用
anyof
运算符:

$[?(@.phoneNumbers[*]。键入anyof[“iPhone”])。id


请注意,这肯定是特定于实现的,可能不会与任何其他库一起使用。

我在这里尝试了您的建议,但没有给我任何结果。如果您在其他地方测试了这个表达式,并且它有效,请告诉我,以便我可以验证。是的,这个表达式中有一些细微差别,可能没有得到广泛支持。我试着想另一种方法。我在这里试过你的建议,但没有给我任何结果。如果您在其他地方测试了这个表达式,并且它有效,请告诉我,以便我可以验证。是的,这个表达式中有一些细微差别,可能没有得到广泛支持。我将尝试另一种方法来实现它。这对我使用Jayway的JsonPath很有效。你觉得呢?这对我使用Jayway的JsonPath很有效。你怎么认为?
[
    {
        "id": "1",
        "phoneNumbers": [
            {
                "type": "iPhone",
                "number": "0123-4567-8888"
            },
            {
                "type": "home",
                "number": "0123-4567-8910"
            }
        ]
    },
    {
        "id": "2",
        "phoneNumbers": [
            {
                "type": "x",
                "number": "0123-4567-8888"
            },
            {
                "type": "y",
                "number": "0123-4567-8910"
            }
        ]
    }
]