实用工具
输入
结果
结果会显示在这里。接口测试工具、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在线解析