JSONPath 测试器
实时测试 JSONPath 表达式,查看匹配结果并高亮显示。支持过滤器、通配符和递归下降。免费,基于浏览器。
- 在浏览器中处理
- 数据不离开你的设备
- 免费 · 无需注册
用微信扫描以下二维码即可分享
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。
JSONPath 语法参考(RFC 9535)
$— 文档根节点.key、['key']、["key"]— 对象成员[n]、[-1]— 数组元素;负索引从末尾倒数[start:end:step]— 切片,例如[0:2]、[1:]、[::-1][0,2]、['title','price']— 一个方括号里放多个选择器,结果按选择器顺序排列[*]、.*— 全部数组元素或对象成员值..key、..[0]、..*— 任意深度的后代[?@.price < 10]— 过滤器;也可写成[?(@.price < 10)][?@.isbn]、[?!@.isbn]— 成员存在 / 不存在[?@.a.b == 'x' && @.c > $.min]— 过滤器内的嵌套路径、&&||!、以 $ 开头的绝对路径length()、count()、match()、search()、value()— RFC 9535 定义的 5 个函数
限制
- RFC 9535 之外的语法会显示「不支持的语法」和字符位置:脚本表达式
[(...)]、=~、in/nin,以及其他库用~取成员名之类的扩展。 $.store.book.length选取名为length的成员,数组没有这个成员,所以结果为空。要按长度筛选,请在过滤器中用length(),例如$[?length(@.book) > 3]。- 结果只列出匹配的值,不显示规范化路径(如
$['store']['book'][0])。 - 对象成员按 JSON 文本中的顺序返回。RFC 9535 没有规定这个顺序,其他实现可能不同。
match()与search()把.换成[^\n\r]后,按带u标志的 JavaScript 正则执行(RFC 9485 §5.3)。JavaScript 不接受的模式结果为 false;\d、先行断言等只有 JavaScript 支持的写法也会被接受。- 数字经
JSON.parse转成 JavaScript 数字,大于 253 的整数在比较前就已丢失精度。
常见使用场景
JSONPath 常用于从 API 响应中提取数据、编写 kubectl 的 -o jsonpath 输出模板,以及 AWS Step Functions 的 InputPath 等字段。
这些地方用的是各自的方言:kubectl 要求表达式写在大括号里,Step Functions 的 ResultPath 不能用过滤器;本工具按 RFC 9535 解析。
熟练掌握 JSONPath 查询可以大幅提高处理嵌套 JSON 结构的效率。
FAQ
什么是 JSONPath?
JSONPath 是 JSON 的查询语言,类似于 XML 的 XPath。它使用路径表达式从 JSON 文档中选取节点,RFC 9535(2024 年)对它做了标准化。kubectl 的输出模板、AWS Step Functions 和不少 API 测试工具都使用它的变体。
JSONPath 表达式中的 $ 是什么意思?
$ 指 JSON 文档的根元素。所有有效的 JSONPath 表达式必须以 $ 开头。单独使用时,$ 选取整个文档;之后可以链式添加选择器,例如 $.store.book[0].title。
如何选取数组中的所有元素?
在数组键名后使用通配符选择器 [*]。例如,$.store.book[*] 返回数组中所有 book 对象。还可以进一步提取每个元素的字段:$.store.book[*].author 返回所有 author 值。
过滤表达式如何使用?
过滤器写作 [?表达式],@ 表示正在判断的元素。按 RFC 9535,括号可写可不写,$.store.book[?@.price < 10] 与 $.store.book[?(@.price < 10)] 等价。可用 ==、!=、<、<=、>、>= 比较,用 &&、||、! 组合条件,判断 @.author.name 这样的嵌套路径,用 $ 与文档其他位置比较,并可调用 length()、count()、match()、search()、value()。
递归下降(..)是什么?
.. 运算符递归搜索当前节点的所有后代。例如,$..author 在整个 JSON 树中查找所有 author 字段,无论嵌套深度如何。
为什么显示「不支持的语法」?
表达式用了 RFC 9535 没有定义的语法,工具会停下并给出字符位置,不会返回空结果。常见的有脚本表达式 [(@.length-1)](改用 [-1])、=~ 运算符(改用 match() 或 search())、in / nin。显示「未找到匹配项」则说明表达式合法,只是 JSON 里没有符合的内容。