如何用JSONPath查找兄弟节点?求获取$0价格的所有location方法
解决JSONPath获取匹配条件的兄弟节点问题
你遇到的问题很典型——当你用$..price[?(@.lowest <= 0)]时,确实只会定位到符合条件的price节点本身,而不是它的兄弟节点location。要拿到目标location,我们需要先筛选出包含符合条件price的父对象,再从中提取location属性。
正确的JSONPath表达式
最直接且高效的写法是:
$[?(@.price.lowest <= 0)].location
表达式解释
$:根节点(这里指顶层的数组)[?(@.price.lowest <= 0)]:过滤数组中满足price.lowest <= 0条件的元素(也就是每个完整的条目对象).location:从筛选后的每个对象中提取location属性
针对你的JSON示例验证
假设你的JSON完整结构是:
[ { "fromDate": "2018-03-30", "images": [{ "type": "LARGE", "url": "" }], "price": { "currencySymbol": "$", "lowest": 0 }, "toDate": "2018-04-07", "location": "Newyork, NY", "priceSuffix": "per night", "details": "2-Bedrooms" }, { "fromDate": "2018-03-30", "images": [{ "type": "LARGE", "url": "" }], "price": { "currencySymbol": "$", "lowest": 100 }, "toDate": "2018-04-07", "location": "Los Angeles, CA", "priceSuffix": "per night", "details": "1-Bedroom" } ]
使用上述表达式后,会返回结果:
["Newyork, NY"]
补充说明
如果你的JSON结构嵌套更深(比如条目在多层嵌套里),可以用$..[?(@.price.lowest <= 0)].location来递归查找所有层级中符合条件的对象并提取location,但如果是顶层数组的情况,直接用$[?(@.price.lowest <= 0)].location性能更好。
内容的提问来源于stack exchange,提问作者onyx
相关产品推荐
相关产品推荐

