JSONPath 查询提取器

Web 工具

用 JSONPath 表达式实时查询并提取 JSON 数据,内置语法示例与匹配计数,支持复制节点路径。支持根节点、递归下降、通配、数组下标与过滤表达式等常用语法。实时显示匹配结果与命中数量,可复制节点路径用于代码取值。适合从复杂响应里定位字段与调试取值表达式。表达式可实时校验。支持递归下降与过滤表达式。

关于 JSONPath 查询提取器

JSONPath 查询工具在浏览器本地对 JSON 数据执行 JSONPath 表达式查询,实时显示匹配结果和命中数量。JSONPath 是类似 XPath 的 JSON 查询语言,支持美元符号根节点、点号子节点访问、方括号索引和切片、星号通配符、双点递归下降和方括号问号条件过滤表达式。内置常用表达式示例可一键填入,如查找所有书名的查询语句和按价格筛选的条件表达式。语法要点:$.store.book[*] 用下标与通配选中多个元素,$..price 用递归下降一次取到任意深度的 price 字段,而 [?(@.price<30)] 做条件过滤,@ 指向当前元素、父级用 @['parent'] 访问。适用于从深层嵌套的 API 响应中提取特定字段、调试 JSON 查询逻辑和数据筛选。查询结果支持以 JSON 格式复制,匹配到的每个节点同时显示完整路径表达式,方便在代码中直接引用。调试时先用内置示例熟悉语法,再改造成自己的查询;复杂过滤建议拆成多步执行、逐步缩小范围,比一次写完长表达式更容易定位问题。

误用之一是混淆通配与筛选:通配返回全部匹配而筛选按条件过滤,两者结果条数差异很大,调试时若不先打印匹配到的路径列表,很容易误判为表达式写错。另一个误用是把查询结果当作单值使用——表达式能跨越数组,因此结果恒为集合,即使只匹配到一条也应当按集合处理,直接取首元素会在数据变化时静默出错。

与替代方案的分工上,点号路径与查询语言的取舍很清楚:直接按层访问更简单也更快,但要求在写代码时就知道结构;查询语言适合结构会变、或需要在一次操作中跨越多条记录的场合,代价是多一层语法。选择依据是「结构是否稳定」——稳定的接口用直接访问更易读,面向第三方或多版本的数据用查询语言更耐用,因为字段层级调整时不必改代码。

把查询表达式纳入代码时需要一并纳入测试:数据结构的变化往往不会让表达式报错,而是让结果条数从三条变成两条,这类「静默变少」最难发现。建议为每个关键表达式固定一组样例数据与期望条数,数据结构或接口版本变化时先跑这组用例,能在改动扩散之前发现问题。

最后一个前提是性能:查询表达式通常需要遍历文档,在很大的数据上逐条执行会明显拖慢处理速度,而直接按层访问可以在解析后一次取到。因此在大批量、结构稳定的数据上,先用查询表达式把路径找出来,再在代码里改用直接访问,能得到「开发期灵活、运行期高效」的组合,这也是这类工具最实用的用法。

与正则匹配文本相比,它的优势是「理解结构」:正则只能匹配字符形态,遇到同名字段出现在不同层级时会一并命中;而路径表达式按层级匹配,能精确区分。因此处理结构化数据时应优先使用路径表达式,正则留给非结构化文本,用错方向会把精力花在排除误匹配上。

实现原理

表达式用路径语法在文档中定位节点,与直接按层访问的区别在于它能跨越数组:一个表达式可以同时匹配多条路径,因此结果恒为集合而非单个值。要点是区分「筛选」与「通配」——通配返回全部匹配,筛选按条件过滤,两者的结果条数差异很大,调试时应先打印路径列表再看值。

输入$.items[*].id 作用于含 3 个 item 的文档
输出返回一个含 3 条路径的集合(而非单个 id)——结果条数本身是重要的调试信号

使用方法

  1. 打开「JSONPath 查询提取器」
  2. 输入或粘贴待处理的内容
  3. 根据需要调整输出选项
  4. 点击「运行」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 调试接口响应 — 从复杂响应中精确取出某个字段,验证数据是否符合预期。
  • 批量提取数据 — 用 $.price 这类表达式一次性取出所有同名字段。
  • 条件筛选 — 用 [?(@.price<30)] 过滤符合条件的元素,快速定位目标数据。
  • 学习 JSONPath — 配合示例边写边看结果,快速掌握 JSONPath 语法。
  • 配置数据映射 — 为低代码/数据管道设计字段映射时,先用本工具验证路径是否正确。
  • 提取错误详情 — 用 $.errors[*].message 一条命令收集校验响应里所有面向用户的错误文案。

常见问题

支持哪些 JSONPath 语法?

支持主流 JSONPath 语法,包括 $ 根、. 子节点、[] 下标、* 通配、. 递归下降,以及 [?(@.field)] 过滤表达式。

查询结果为什么是数组?

JSONPath 可能匹配多个节点,因此结果统一以数组形式返回,即使只命中一个也会包裹在数组中。

表达式写错会怎样?

若表达式非法会提示「无效的 JSONPath」,修正后即可实时重新查询,不会影响原始 JSON。

能处理大 JSON 吗?

可以,查询在本地完成。不过超大数据的复杂递归查询可能略有延迟,建议先用本站 JSON 格式化精简数据。

和 jq 一样吗?

理念相似但语法不同。JSONPath 更接近 XPath 风格;如果你熟悉 jq,可以把本工具当作浏览器端的可视化替代。

@ 和 $ 有什么区别?

$ 指 JSON 文档的根,@ 指当前被求值的元素(多用于问号过滤里),两者用途不同,混用容易导致查询结果为空或报错。

$.data[*].id 为什么选不中?

通常是路径与真实结构不一致。常见原因:data 是 null 或对象而非数组(此时应写 $.data.id);数组里的元素自身没有 id 这个字段;或结构里存在两个同名但层级不同的 data。若不确定层级,先用 $.data 打印原始结构核对,再用递归下降 $..id 一次取出所有名叫 id 的字段,对照本处的命中数与路径列,逐层缩小到准确的写法。把整条表达式拆成从 $ 根逐步下探的小步来验证,比一次写完整条更容易定位是哪一层出了偏差。

JSONPath 的 $ 和 @ 分别指什么?

$ 是根对象(表达式都从 $ 开始),@ 是过滤表达式里的「当前元素」。例如 $..book[?(@.price<10)] 表示:从根开始递归找 book 数组,筛出 price 小于 10 的当前元素。混淆两者是写不出表达式的首因。

广告