调接口的时候最常见的一个麻烦:拿到一坨 JSON,只想看里面某个字段。手工翻太慢,正则写不对,急得直抓头。
这时候 JSONPath 就像 “JSON 的放大镜”,一句表达式就能把你要的值抠出来。
下面整理了一份 JSONPath 速查表,加上实用示例,调试接口的时候直接抄就行。
示例数据
| 1 | { | 
JSONPath 速查表
| 表达式 | 说明 | 示例结果 | 
|---|---|---|
| $ | 根节点 | 整个 JSON | 
| $.store.book | 访问数组 | 返回 3 本书 | 
| $.store.book[*].title | 遍历数组所有元素 | ["The Great Gatsby","Learning JSON","1984"] | 
| $.store.book[0] | 下标取值(第 1 本书) | {"category":"fiction","title":"The Great Gatsby","price":10.99} | 
| $.store.book[-1:] | 取最后一个元素 | {"category":"fiction","title":"1984",...} | 
| $.store.book[0,2] | 取多个指定下标 | Gatsby + 1984 | 
| $.store.book[0:2] | 切片(0 到 1) | 前两本书 | 
| $.store.book[?(@.price < 12)] | 条件过滤 | Gatsby 和 1984 | 
| $.store.book[?(@.category == 'fiction')] | 按字段过滤 | 两本小说 | 
| $..price | 深度搜索所有 price | [10.99,15.50,8.99,19.95] | 
| $.store..price | 指定节点下递归找 price | 同上 | 
常用技巧
- 通配符 \*:比如$.store.*,book 和 bicycle 全拿。
- 递归 ..:地毯式搜索,$..price能抓到所有价格。
- 过滤器 ?():筛选利器,写法[?(@.字段 < 条件)]。
- 切片 [start:end]:和 Python 一样,适合翻页。
快速示例
- 
找店里最便宜的书名: 1 $.store.book[?(@.price < 9)].title 
结果:["1984"]
- 
所有价格: 1 $..price 
[10.99,15.50,8.99,19.95]
- 
直接取最后一本书: 1 $.store.book[-1:] 
使用小贴士
- 不同实现的 JSONPath 库可能有差异,比如负索引、正则过滤,有些工具不支持。
- 表达式记得 $开头,不然常常报错。
- 建议在 在线 JSONPath 工具里直接试,能一边写一边看结果。
 
                    
                     
           
                