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
- Paste or type your input in the input area above.
- The tool processes your input automatically or click Run.
- Copy or download the result using the action buttons.
- Use Ctrl+Enter to run quickly from the keyboard.