实用工具

JSONPath 在线测试

用 JSONPath 表达式查询 JSON,列出每个匹配项的精确路径和 JSON Pointer。

浏览器本地运行数据格式1158
免费

输入

0 B

结果

结果会显示在这里。

接口测试工具、AWS Step Functions、日志管道和 kubectl 的 -o jsonpath 都用 JSONPath 从 JSON 里取值,而表达式很容易写得差之毫厘。贴入文档、输入表达式,就能看到它到底选中了什么:每个匹配项都附带规范化路径和 JSON Pointer,你能看出是哪个数组的哪个元素命中了,而不只是看到一个值。底层是 JSONPath-Plus,JavaScript 里用得最广的实现,在原始语法之上支持过滤器、递归下降和 ^ 取父节点。

它是怎么工作的

  • 像 $[?(@.stargazers_count > 100000)] 这样的过滤器在 JSONPath-Plus 的安全求值器里执行,它自己解释表达式,不会当成 JavaScript 运行。
  • 每个匹配项同时给出方括号形式的路径和 RFC 6901 JSON Pointer,可以直接用在 JSON Patch 里。
  • 只看值会得到扁平的结果数组,只看路径会得到位置列表。
  • 返回空数组不是报错,说明表达式合法,只是什么也没选中。

你的数据去了哪里

哪也没去。本工具完全在你的浏览器里运行:你粘贴的文本由页面处理,不会传输到任何服务器,也不会写进任何日志。

本工具免费且无需登录,运行结果只存在于你当前的页面里,不会被保存到任何地方。

它要花多少

本工具完全免费,不需要登录,也不消耗积分。

常见问题

这和 RFC 9535 的 JSONPath 一样吗?
大体一样,但不完全相同。RFC 9535 在 2024 年才把 JSONPath 标准化,比 JSONPath-Plus 晚了很多年,差别主要在过滤器语法:RFC 写成 $[?@.price < 10] 并有自己的函数集,JSONPath-Plus 用的是最初的 $[?(@.price < 10)] 写法。普通路径、通配符、切片和递归下降的行为一致。
这里能用的表达式,在 kubectl 里也能用吗?
简单的可以。kubectl 在自己的 JSONPath 方言外面套了一层模板语法,比如 kubectl get pods -o jsonpath='{.items[*].metadata.name}',去掉花括号、前面加上 $,就能在这里测试路径部分。过滤器和函数两边有差异,超出基本取值的表达式请以 kubectl 实测为准。
过滤器为什么报“无法读取属性”之类的错误?
安全求值器只允许对当前节点做属性访问、比较和逻辑运算,拒绝方法调用、访问构造函数等任何可能执行任意代码的写法。这是有意为之:从别处复制来的表达式,不应该有机会在你的浏览器里执行代码。
.. 和 * 有什么区别?
* 匹配某个节点的所有直接子节点;.. 会向下遍历所有层级。$..name 会找出任意深度的 name 键,而 $[*].name 只看顶层数组往下一层。对大文档用递归下降,返回的匹配数往往比你预想的多得多。

背后的开源项目

本工具运行在 JSONPath-Plus/JSONPath 之上,以 MIT 许可发布。如果你需要在自己的程序里实现同样的能力,直接用这个库。

JSONPath-Plus/JSONPath

也常被称作

  • jsonpath在线测试
  • jsonpath语法
  • jsonpath过滤表达式
  • jsonpath工具
  • json路径提取
  • jsonpath在线解析