DevToolPal
简

JSONPath 在线测试

对 JSON 执行 JSONPath 查询,列出所有匹配的值和路径,支持过滤表达式和函数(RFC 9535)。

本地处理,不上传

选项

显示

JSON

0 字符 · 0 B

匹配结果

0 字符 · 0 B

这是什么

JSONPath 是 JSON 的查询语言,作用类似 XML 的 XPath。像 $.store.book[*].title 这样的表达式会深入文档,选出你关心的值。这个工具用你输入的 JSONPath 表达式查询粘贴进来的 JSON,把所有匹配结果列成一个 JSON 数组:可以只看匹配的值、只看它们的规范化路径(例如 $['store']['book'][0]['title']),或者两者一起看。

工具遵循 2024 年发布的 IETF 标准 RFC 9535,结果与 JavaScript、Java、Python、Go 等语言的新版 JSONPath 库一致。适合在写进代码之前先试一试表达式、排查过滤条件为什么查不到数据,或者从很大的接口响应里取出几个字段。

怎么用

  1. 把 JSON 粘贴到 JSON 输入框,或上传 .json 文件,也可以点 示例 载入经典的书店文档。
  2. 在 JSONPath 表达式 里输入查询,匹配结果会随输入实时更新。
  3. 在 显示 里选择:值、路径,或路径和值。
  4. 复制或下载结果。表达式有语法错误时,会提示解析失败的字符位置。

语法速查

表达式含义
$文档根节点
.name 或 ['name']对象的成员
[0]、[-1]数组元素(负数从末尾数)
[1:3]、[::2]切片:起点、终点(不含)和步长
*所有成员或元素
..name任意深度的 name
[?@.price < 10]过滤条件为真的子节点,@ 表示当前项

过滤表达式可以用 &&、||、! 组合条件,用 $ 和文档其他部分比较,还可以调用函数:length(@.tags) > 2、count(@.items[*]) == 0,match(@.code, '[A-Z]{3}') 要求整个字符串匹配正则,search(@.title, 'Ring') 只要字符串中有一处匹配即可。

示例

用示例里的书店数据,下面的表达式选出价格低于 10 的书名:

$.store.book[?@.price < 10].title

结果是:

["Sayings of the Century", "Moby Dick"]

改成 $..book[?@.isbn].author 可以列出有 ISBN 的书的作者,改成 $..price 则收集店里所有价格,包括自行车的价格。

常见问题

› 支持哪些 JSONPath 语法?

支持 RFC 9535 标准语法:点号和方括号成员名、通配符、数组下标(包括负数下标)、切片、用 .. 递归查找、带比较运算和 && || ! 的过滤表达式,以及 length()、count()、match()、search()、value() 五个函数。旧写法 ?(@.price < 10) 也能用,因为括号只是分组。

› 为什么查询结果是空数组?

空数组表示表达式有效,但没有匹配到任何节点。请检查成员名(区分大小写),确认某个值是数组还是对象;也可以先用 $..* 这样宽泛的查询并把「显示」切到「路径」,看看文档里实际有什么。

› 能用 [(@.length-1)] 这样的脚本表达式吗?

不能。脚本表达式会执行任意代码,也不属于标准。请改用负数下标:[-1] 是最后一个元素,[-2:] 是最后两个。

› 我的 JSON 会上传到服务器吗?

不会。表达式的解析和求值都由页面自身的代码在浏览器里完成,不上传任何内容。