JSONPath 在线工具与示例|表达式速查与提取

JsonTool
订阅
充电
|

调接口的时候最常见的一个麻烦:拿到一坨 JSON,只想看里面某个字段。手工翻太慢,正则写不对,急得直抓头。
这时候 JSONPath 就像 “JSON 的放大镜”,一句表达式就能把你要的值抠出来。

下面整理了一份 JSONPath 速查表,加上实用示例,调试接口的时候直接抄就行。

示例数据

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"store": {
"book": [
{ "category": "fiction", "title": "The Great Gatsby", "price": 10.99 },
{ "category": "programming", "title": "Learning JSON", "price": 15.50 },
{ "category": "fiction", "title": "1984", "price": 8.99 }
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}

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 工具里直接试,能一边写一边看结果。