如何使用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
相关产品推荐
相关产品推荐

