JSONPath Tester

One input per line. Output is numbered to match the input order.
Pinned tools are listed in your favourites on the home page.Copies a link to this tool that carries your current input, so it opens ready to run.Gives you an iframe snippet for putting this tool on your own site.
JSON
Ctrl+Enter Run  · Ctrl+Shift+C Copy  · Esc Clear

Understand JSONPath Tester

JSONPath 是面向 JSON 的查询语言,这个测试器会把表达式跑在你的数据上,返回它匹配到的每一个值。

How it works

表达式从文档根 $ 开始,每一步都会收窄向下传递的值集合:.name 和 ['name'] 取一个键,[2] 取一个数组元素而负索引从末尾开始计数,* 取所有子项,..name 在每一层中搜索该键,而 [?(@.price < 10)] 保留其字段满足该比较的数组元素。结果始终是一个列表,空列表是有效答案而不是错误。

When to use it

  • 从层层嵌套的 API 响应中取出某个字段,而不必手写遍历代码。
  • 在把表达式写进配置文件之前先调试正确——Kubernetes、Jenkins、Postman 测试和许多日志工具都接受 JSONPath。
  • 统计一个响应中有多少条目满足某个条件。
  • 当你不知道某个键位于文档何处时,找出它的每一处出现。

Watch out for

  • 一个过滤器只能有一个比较。[?(@.price < 10 && @.stock > 0)] 不受支持,而且过滤器作用于数组——对对象使用它匹配不到任何东西。
  • 切片语法不受支持,而且它是静默失败而非报错:[0:2] 会被读成索引 0,只返回一个元素。
  • 递归下降找到的东西比你预期的多。$..id 会按文档顺序返回每一层上的每一个 id,包括位于无关嵌套对象内部的那些。
  • JSONPath 直到 2024 年的 RFC 9535 才有正式标准,因此各实现在边界情况上并不一致。在这里能用的表达式,在 Jayway、jsonpath-plus 或某个云服务商的查询字段中可能表现不同——请在它真正运行的地方测试。

Not the right tool for: 转换数据。JSONPath 负责选取值;把它们重塑成一个新文档是 jq 和 JMESPath 的职责。

Frequently Asked Questions

$.store.book[*].title 和 $..title 有什么区别?

$.store.book[*].title 沿着特定路径遍历,从 book 数组中取出各个 title。$..title 使用递归下降(..)在文档中任意嵌套层级上查找所有 "title" 键。递归下降很强大,但在复杂文档中可能返回出乎意料的结果。

过滤表达式是怎么工作的?

过滤表达式使用 [?(@.key 运算符 值)] 语法:$..book[?(@.price < 10)] 会找出所有价格低于 10 的书。运算符有:== != < <= > >=。@ 符号指代当前正在求值的元素。

JSONPath 有标准吗?

JSONPath 由 Stefan Goessner 于 2007 年提出,直到 RFC 9535(2024)才有正式标准。各实现之间存在细微差异。本工具实现的是与多数库(jsonpath-plus、Jayway、json-path)兼容的通用 Goessner 子集。

How to Use JSONPath Tester

  1. Paste or type your input in the input area above.
  2. The tool processes your input automatically or click Run.
  3. Copy or download the result using the action buttons.
  4. Use Ctrl+Enter to run quickly from the keyboard.