🔍

首页 › 使用教程 › 开发与效率

JSONPath 教程:$ 根节点、点号和下标、[*] 通配、.. 递归、切片和 ?() 过滤

发布于 · 阅读约 2 分钟 · 用到的工具:JSONPath 在线测试

一句话答案

JSONPath 用 $ 表示根节点,$.store.book[0].title 取第一本书名,$..price 递归取出所有 price,$.store.book[?(@.price<10)].title 筛选价格低于 10 的书名。把 JSON 和表达式粘贴到在线测试工具,可以实时看到匹配结果。

本文目录
  1. 语法速查
  2. 示例数据
  3. 在线测试
  4. 写表达式的小技巧
  5. 常见问题

JSONPath 是在 JSON 里定位和提取数据的查询语法,常用于接口测试、日志分析和数据处理。

语法速查

写法含义
$根节点
.key 或 ['key']取子节点
[0]数组第 1 个元素(下标从 0 开始)
[*]所有元素
..key递归查找所有层级的 key
[0:2]切片,取下标 0 和 1
[?(@.price<10)]过滤,@ 表示当前元素

示例数据

下面用在线工具自带的书店示例数据:store 里有 book 数组(A 价格 8、B 价格 12、C 价格 5)和一辆 bike(价格 19)。

表达式结果
$.store.book[0].title"A"
$.store.book[*].title"A"、"B"、"C"
$..price8、12、5、19
$.store.book[0:2].title"A"、"B"
$.store.book[?(@.price<10)].title"A"、"C"

注意 $..price 会把 bike 的价格也找出来,因为递归查找不区分层级。

在线测试

  1. 粘贴 JSON:打开 JSONPath 在线测试,在 JSON 框里粘贴数据,也可以先用自带的示例。
  2. 输入表达式:在 JSONPath 框里输入表达式,例如 $.store.book[?(@.price<10)].title。
  3. 看结果:下方实时显示匹配到的结果和数量,表达式写错时会提示。
筛选价格低于 10 的书名,匹配 2 个结果
筛选价格低于 10 的书名,匹配 2 个结果
🧭 JSONPath 在线测试
免费在线使用,文件和数据只在你的浏览器本地处理,无需注册。
打开工具 →

写表达式的小技巧

  1. 先粗后细:先用 $..key 确认字段存在,再写精确路径;
  2. 键名有特殊字符:用 ['key-name'] 方括号写法;
  3. 过滤条件:比较数字时不加引号,比较字符串时加引号;
  4. 不同实现有差异:各种编程语言的 JSONPath 库在过滤语法、结果顺序上可能略有不同,以实际使用的库为准;
  5. JSON 本身有格式错误时先用 JSON 格式化 检查。

数据结构的校验可以用 JSON Schema。

常见问题

$ 和 @ 有什么区别?

$ 表示整个 JSON 的根节点,@ 在过滤表达式里表示正在判断的当前元素。

.. 是什么意思?

递归下降,在所有层级里查找指定的键,例如 $..price 取出所有 price。

数组下标从几开始?

从 0 开始,[0] 是第一个元素。

数据会上传吗?

不会,JSONPath 测试完全在浏览器本地运行。