You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSONPath根据列表中的值查找对应元素?

用JSONPath筛选拥有指定爱好的人员

你已经可以通过XPath语句定位拥有爱好“Dance”的人员:

Persons/Person/Hobbies/Hobby[text()="Dance"]/../..

对应的XML结构如下:

<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>

现在需要针对以下JSON数据实现相同功能,筛选出爱好包含“dance”的人员:

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

正确的JSONPath语句

直接使用过滤表达式即可实现需求,推荐写法:

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

如果你的JSONPath环境不支持includes语法,可以用兼容写法:

$[?(@.hobbies.indexOf('dance') != -1)]

语法解释

  • $:指向JSON数据的根节点(这里是整个人员数组)
  • [?(...)]:过滤条件,只保留符合括号内规则的数组元素
  • @:代表当前遍历到的数组元素(即单个人员对象)
  • @.hobbies includes 'dance':检查当前对象的hobbies数组是否包含'dance'字符串,这是主流JSONPath实现支持的简洁语法
  • @.hobbies.indexOf('dance') != -1:通过数组的indexOf方法判断,当目标值存在时返回索引(非-1),兼容性更强

执行后会返回你期望的结果:

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

内容的提问来源于stack exchange,提问作者David542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:03:37