JSONPath 求值器 — 测试 JSONPath 表达式
在浏览器中对 JSON 数据运行 JSONPath 表达式。支持标准 JSONPath 和 JSONPath Plus 扩展。完全在浏览器中运行,无上传、无限制。
JSON Path Evaluator
Evaluate JSONPath expressions against JSON data. First line = JSON, remaining lines = JSONPath expression. Works entirely in your browser.
JSONPath 对 JSON 的角色,正如 XPath 对 XML:一种用于从结构化文档中提取特定值的查询语言。它由 Stefan Gössner 在 2007 年定义,目的是像 XPath 遍历 XML 那样遍历 JSON,如今已成为在测试、脚本与配置文件中抽取 JSON 值的标准方式。基础语法是:用 $ 表示根,用 .key 访问对象的属性,用 [n] 按下标访问数组,用 [*] 表示数组的全部元素,用 .. 表示递归下降(在任意深度上匹配)。这一个子集就能覆盖绝大多数用例;JSONPath Plus 在它之上的扩展则补上了 filter 表达式、算术运算和一小撮函数。
JSONPath 中「不那么显然」的一点,是 $.a.b.c 与 $..c 之间的差别。前者匹配位于特定路径上的 c 值——路径中只要任何一段不存在,结果就是空。后者匹配文档中任意深度的所有 c 值——在不知道结构的前提下查找某个字段名的所有出现时非常有用。代价是精度的损失:前者严格,会在路径缺失时响亮地失败;后者宽松,可能返回比预期更多的匹配。选哪一种取决于数据:结构稳定(由你控制的 API)适合严格形式;探索性查询(未知 API、临时分析)适合递归形式。
最终的交接:如果终点是一段 shell 脚本,jq 是标准工具——它的语法是基础 JSONPath 的严格超集。如果终点是 JavaScript 或 Python 中的测试用例,对应语言的 JSONPath 库就是更合适的选择。如果终点是配置文件(Cypress 测试选择器、Postman 测试脚本),JSONPath 表达式本身就是产物——把它直接粘贴到目标位置的测试语法里即可。对于需要 filter 表达式或函数的复杂查询,JSONPath Plus 是唯一被广泛支持的扩展,而本工具原生支持它。
使用方法
粘贴你的 JSON
把一份 JSON 文档放入左侧面板。数据在你键入时实时解析与校验;格式不合法的 JSON 会被就地标记,并指向语法错误的位置。
编写 JSONPath 表达式
在 JSONPath 输入框中键入类似 `$.users[*].email` 或 `$..price` 的表达式。求值器在你键入时实时运行,并在 JSON 面板中高亮匹配的节点。
查看结果
结果面板以 JSON 数组的形式展示匹配到的值,附带匹配数量与每条匹配的路径。点击任一结果,可在 JSON 面板中跳转定位到对应位置。
常见问题
JSONPath 和 JSONPath Plus 有什么区别?
JSONPath 是 Stefan Gössner 在 2007 年提出的原始规范。JSONPath Plus 在它的基础上扩展了算术运算、filter 表达式和数组切片等原版不支持的能力。本工具两者都支持 —— 解析器会根据表达式语法自动检测所用的方言。
如何取出一个数组里某个键的所有值?
使用通配符 `[*]`。对于 `$.users[*].email`,表达式会返回 `users` 数组中每个对象的 `email` 值。对于嵌套数组,递归下降符 `..` 能匹配任意深度的内容 —— `$..email` 会返回文档中任意位置的 `email` 值。
能否按条件过滤结果?
可以 —— JSONPath Plus 支持 filter 表达式。`$.users[?(@.age > 18)]` 只返回年龄大于 18 的用户;`$.items[?(@.price < 10)]` 只返回价格低于 10 的条目。filter 表达式中的 `@` 表示当前节点。
如果没有节点匹配会怎样?
结果是一个空数组。结果面板显示 `[]`,匹配数量为 0。空结果并非错误 —— 它只表示表达式合法,但数据中没有任何匹配。如果这与预期不符,请检查表达式语法与数据结构。
支持 length()、min() 这类 JSONPath 函数吗?
JSONPath Plus 支持一小撮函数:`length()`、`count()`、`match()`、`search()`、`value()`、`keys()`、`min()`、`max()`、`avg()`、`sum()`。完整列表见 JSONPath Plus 文档。标准 JSONPath 不支持其中任何一个。
限制说明
- JSONPath 方言支持有限本工具支持标准 JSONPath 和 JSONPath Plus。厂商特有扩展(带自定义运算符的 Goessner JSONPath、XPath 风格的轴等)不在支持之列。遇到复杂表达式返回空结果时,请留意匹配数量与匹配到的具体路径。
- 不支持 schema 感知的过滤filter 表达式是对数据的运行时检查,并非 schema 感知的谓词。`?(@.type == 'user')` 这类 filter 在运行时可以工作,但无法在求值前对照 JSON Schema 做类型检查。
- 不支持流式求值完整 JSON 文档会一次性载入内存后再求值。面对多 GB 级别的 JSON,界面可能停滞或直接失败。对装不进内存的文档,请使用流式 JSON 解析器(如 ijson、oboe.js)。
平台说明
- macOS
- 命令行场景下,`jq '.users[].email'` 是简单 JSONPath 的标准等价物。本浏览器工具更适合处理 filter 表达式、递归下降,以及 `jq` 不支持的 JSONPath Plus 函数。
- Windows
- PowerShell 的 `ConvertFrom-Json` 配合 `Select-Object` 可以遍历 JSON。当遇到 PowerShell 对象管道语法不擅长表达的 JSONPath 表达式(尤其是递归下降与 filter)时,本浏览器工具是更合适的选择。
- Linux
- `jq` 是 JSONPath 查询的标准 CLI 工具。本浏览器工具更适合 JSONPath Plus 特有的能力(filter 表达式、算术、函数)—— 这些是原生 `jq` 不支持的;如需可在 `jq` 中加自定义函数,或改用 `faudensics/jaq`。
- Web
- 完全在客户端运行,页面加载后可离线使用。在没法安装 `jq` 或 Python 的受限环境中,或需要在浏览器标签页里交互式探索抓到的 API 响应时特别有用。