调接口的时候最常见的一个麻烦:拿到一坨 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 工具里直接试,能一边写一边看结果。