UFOZoo

JSONPath 测试 — 在线表达式求值与调试器

JSONPath 测试器和求值器,实时表达式求值。支持点号/括号表示法、通配符、递归下降和过滤器表达式。内置常用示例库。

功能特性

  • 实时 JSONPath 求值——输入表达式后立即显示查询结果
  • 完整的 JSONPath 语法支持:点号表示法、括号表示法、通配符和递归下降
  • 数组切片操作符 [start:end:step] 用于提取 JSON 数据子数组
  • 过滤器表达式 [?(@.key comparison value)] 支持条件数据提取
  • 递归下降 (..) 搜索深层嵌套的 JSON 结构中的匹配键
  • 内置路径示例库,提供常用 JSONPath 模式供快速学习
  • 匹配计数显示,一目了然知道表达式返回了多少结果
  • 格式化 JSON 输出带语法高亮,方便检查结果
  • 一键复制结果到剪贴板,用于代码或文档中
  • JSON 验证功能,对无效输入或错误路径给出清晰错误提示
  • 支持负数数组索引(如 [-1] 表示最后一个元素)
  • 支持 length() 函数计算数组元素数量

使用方法

  1. 1在左侧文本框中粘贴或输入 JSON 数据。编辑器实时验证 JSON 格式——绿色指示有效,红色表示有错误。
  2. 2在输入框中输入 JSONPath 表达式,以 $ 开头。例如 $.store.book[*].title 选择所有书名。
  3. 3使用示例路径下拉菜单加载常用 JSONPath 模式,观察它们如何作用于数据。
  4. 4在右侧面板查看查询结果——匹配值以格式化 JSON 显示,并带有匹配计数。
  5. 5点击复制按钮将结果复制到剪贴板,或使用清除按钮重置工作区。
  6. 6尝试过滤器表达式如 [?(@.price < 10)] 来提取符合条件的数据。
  7. 7尝试数组切片语法 [start:end:step],类似 Python——如 $..book[0:2] 选取前两本书。
  8. 8使用递归下降 $..* 探索 JSON 文档中的每个值。
  9. 9在单个表达式中组合多种 JSONPath 操作符——例如 $..book[?(@.price > 10)].title 可在任何嵌套层级查找价格超过 10 的所有书名。

常见问题

什么是 JSONPath?

JSONPath 是一种针对 JSON 的查询语言,类似于 XML 的 XPath。它提供了一种简单的方法来导航、过滤和提取复杂 JSON 文档中的特定数据。JSONPath 由 Stefan Gössner 创建,现已广泛应用于多种编程语言和工具中。它使用简洁的语法,结合了点号表示法(类似 JavaScript)和受 XPath 启发的递归下降和过滤器表达式等功能。

支持哪些 JSONPath 语法?

本工具支持以下最常用的 JSONPath 操作符: • `$` — 根对象(所有路径以此开头) • `.key` 或 `['key']` — 子操作符,访问对象属性 • `..` — 递归下降,搜索嵌套结构 • `*` — 通配符,选择所有元素或属性 • `[n]` — 数组索引(支持负索引反向访问) • `[start:end:step]` — 数组切片操作符 • `[?(expression)]` — 过滤器表达式,支持 ==、!=、<、>、<=、>= • `@` — 过滤器表达式中的当前节点引用 • `length()` — 获取数组长度的函数

JSONPath 与 XPath 有何不同?

JSONPath 之于 JSON 就像 XPath 之于 XML。虽然它们有相似的概念(路径表达式、通配符、谓词/过滤器),但存在关键差异: • JSONPath 使用 $ 表示根元素,XPath 使用 / • JSONPath 使用 . 访问子节点,XPath 使用 / • JSONPath 使用 .. 递归下降,XPath 使用 // • JSONPath 使用 [n] 进行数组索引(从0开始),XPath 使用 [n+1](从1开始) • JSONPath 使用 [?()] 做过滤器,XPath 使用 [谓词] • JSONPath 使用 @ 表示过滤器中的当前节点,XPath 也使用 @ 但表示属性

过滤器表达式如何工作?

JSONPath 中的过滤器表达式使用 `[?(expression)]` 语法来条件性地选择数组元素。表达式对每个元素求值,`@` 代表当前元素。常见模式: • `[?(@.price < 10)]` — price 小于 10 的元素 • `[?(@.author == 'Tolkien')]` — author 等于 'Tolkien' 的元素 • `[?(@.stock)]` — stock 属性为真值的元素 支持的运算符:==、!=、<、>、<=、>=。字符串字面量需要引号(单引号或双引号),数字字面量不需要。

JSONPath 中的递归下降 (..) 是什么?

`..` 操作符(递归下降)搜索 JSON 结构的所有嵌套层级,寻找匹配的属性名。例如,`$..price` 会在文档的任何深度查找所有 price 属性,无论它在第一层、嵌套对象内部还是数组元素内部。这对于从深层嵌套结构中提取所有给定键的值非常有用,无需指定完整路径。使用 `$..*` 可以选择文档中的每一个值。

JSONPath 支持数组切片吗?

支持。JSONPath 使用 `[start:end:step]` 语法支持数组切片,类似于 Python 的切片表示法: • `[0:3]` — 前三个元素(索引 0、1、2) • `[5:]` — 从索引 5 到末尾 • `[:3]` — 前三个元素 • `[::2]` — 每隔一个元素 • `[-1:]` — 最后一个元素 • `[-3:-1]` — 倒数第三个和倒数第二个元素 切片索引可使用负数从数组末尾开始计数。

我的 JSON 数据会被发送到服务器吗?

不会。所有处理——JSON 解析、JSONPath 求值和结果格式化——完全在浏览器中进行。你的 JSON 数据和路径表达式永远不会离开你的设备。没有后端服务器、没有 API 调用、没有数据收集。页面加载后甚至可以断网继续使用。这使得它可以安全地处理敏感或机密 JSON 数据。

JSONPath 的常见用例有哪些?

JSONPath 广泛用于: • 从 API 响应中提取特定字段(如获取所有用户邮箱) • 基于条件过滤数组(如金额超过 $100 的订单) • 导航深层嵌套的 JSON 结构,无需编写复杂的循环 • 开发过程中测试 API 端点响应 • 数据转换和 ETL 管道 • 验证 JSON 数据结构包含预期的值 • 调试复杂 JSON 文档,探索其内容 • 查询基于 JSON 的数据库或配置文件

如何处理 JSON 或 JSONPath 语法错误?

工具实时验证 JSON 数据和 JSONPath 表达式。JSON 错误:检查缺少逗号、尾逗号、未加引号的键或不匹配的括号。JSONPath 错误:确保路径以 $ 开头,检查括号匹配,验证过滤器表达式使用正确的比较运算符。

点号表示法和括号表示法有什么区别?

点号表示法($.store.book[0].title)对简单属性访问更简短易读。括号表示法($['store']['book'][0]['title'])在属性名包含特殊字符(空格、点号、括号)或使用变量时必需。工具有两种都支持,可以自由混用。

相关工具