如何在JSonPath中通过列表中的值查找所有元素

2vuwiymt  于 2023-05-08  发布在  其他
关注(0)|答案(2)|浏览(223)

我可以通过以下方式找到一个有“舞蹈”爱好的人:

Xpath = Persons/Person/Hobbies/Hobby[text()="Dance"]/../..
<Persons>
    <Person>
        <Name>David</Name>
        <Age>20</Age>
        <Hobbies>
            <Hobby>Sing</Hobby>
            <Hobby>Dance</Hobby>
        </Hobbies>
    </Person>
    <Person>
        <Name>Frank</Name>
        <Age>30</Age>
        <Hobbies>
            <Hobby>Sing</Hobby>
            <Hobby>Read</Hobby>
        </Hobbies>
    </Person>
</Persons>

我如何为JSONPath做同样的事情?例如,我有这个json:

[
    {"name": "david", "age": 20, "hobbies": ["dance", "sing"]},
    {"name": "frank", "age": 30, "hobbies": ["sing", "read"]}
]

到目前为止,我有$[*].hobbies[*],但我不知道如何进一步。我用https://jsonpath.com/来测试。我想要的结果应该是:

{"name": "david", "age": 20, "hobbies": ["dance", "sing"]}
qv7cva1a

qv7cva1a1#

您需要执行嵌套的筛选器表达式查询。

$[?(@.hobbies[?(@ == 'dance')])]

第一个[]语法使您进入外部数组。
此时,您需要一个筛选查询,它查看每一项。对于每一项,您需要查看hobbies数组的每一项,因此需要

  • .hobbies来得到这个数组
  • 另一个[]来进入数组
  • 另一个过滤器查询以检查dance
1dkrff03

1dkrff032#

这并不是对您问题的直接回答,但是由于您显然已经了解XPath,并且您对JSONPath支持的变化提出了一些问题,我想我应该指出,您也可以在标准XPath 3.1(XPath的最新版本)中查询JSON数据。例如
将下面的XPath应用到JSON数组:

?*[?hobbies="dance"]

结果:

{"hobbies":["dance","sing"],"name":"david","age":20}

XPath fiddle

相关问题