🔍

JSONPath 查询工具

使用 JSONPath 表达式查询和提取 JSON 数据

JSON 输入

JSONPath

示例:$.store.book[0].title, $.store.book[*], $..author

什么是 JSONPath

JSONPath 是 JSON 的查询语言,类似于 XML 的 XPath。它提供标准化语法,使用路径表达式导航和提取复杂 JSON 结构中的数据。JSONPath 使用 $ 表示根对象,. 用于子访问,[] 用于数组索引,* 用于通配符,.. 用于递归下降。它支持过滤器 [?(@.property > value)]、数组切片 [start:end:step] 和多选择器。JSONPath 广泛用于 API 测试、数据转换、配置查询和 JSON 操作任务。它简化了从深度嵌套的 JSON 中提取特定值,无需编写复杂的 JavaScript 代码。

功能特点

🔍

高级查询语法

支持完整的 JSONPath 语法,包括通配符 (*)、递归下降 (..)、数组切片 ([start:end])、过滤器 ([?(@.price < 10)])和多路径选择器
📋

路径表达式模板

预构建的常用查询模板:根访问 ($)、直接子节点 ($.key)、数组项 ($.arr[*])、过滤项 ($.arr[?(@.id)])、递归搜索 ($..key)

实时预览

即时执行查询,带语法高亮的 JSON 输入和输出,显示匹配路径、结果计数,并在源 JSON 中高亮匹配节点
💾

结果导出

将查询结果导出为 JSON(数组或单个值)、表格数据的 CSV 或格式化文本,一键复制和下载选项

📋使用指南

1️⃣
输入 JSON 数据
粘贴或上传要查询的 JSON 数据
2️⃣
编写 JSONPath
输入 JSONPath 表达式或使用常见模式模板
3️⃣
执行查询
运行查询以查看带语法高亮的匹配结果
4️⃣
导出结果
以您喜欢的格式复制或下载提取的数据

📚技术介绍

📝JSONPath 语法

JSONPath 表达式以 $(根对象)开头,使用点符号 ($.property) 或括号符号 ($['property']) 进行访问。子节点使用 . 分隔符 ($.store.book),数组使用 [index] 或 [*] 表示所有项。数组切片 [start:end:step] 提取范围,如 [0:3](前 3 项)或 [-1](最后一项)。递归下降操作符 .. 搜索所有级别:$..author 查找所有 author 属性,无论嵌套深度如何。联合操作符 [,] 选择多个项:$[0,2,5] 获取特定数组索引。

🔍过滤器表达式

过滤器使用 [?(@.condition)] 语法选择匹配条件的项。@ 表示迭代中的当前节点。比较操作符:==、!=、<、<=、>、>=。逻辑操作符:&& (and)、|| (or)、! (not)。示例:[?(@.price < 10)] 选择价格低于 10 的项;[?(@.category == 'fiction' && @.price < 20)] 组合条件。正则表达式匹配:[?(@.name =~ /pattern/)] 按正则过滤。过滤器可以使用 $ 引用根以进行跨层次比较:[?(@.price < $.maxPrice)]。

🔧实现变体

JSONPath 有多个实现,语法略有不同:Goessner 的原始版本(JavaScript)、Jayway(Java)、jsonpath-ng(Python)。差异包括过滤器操作符(有些使用 @ vs $)、正则支持、脚本表达式和函数扩展。一些实现添加了函数,如 @.length、@.min()、@.max() 用于聚合。脚本表达式 [(@.price * @.quantity)] 启用计算。父操作符 ^ 和当前路径 ~ 提供上下文。始终检查目标实现的文档以了解支持的功能和语法特性。

🎯实际应用

JSONPath 在 API 响应解析中表现出色,从 REST API JSON 响应中提取特定字段,无需完全反序列化。配置管理使用 JSONPath 查询和更新嵌套配置值。数据转换管道使用 JSONPath 将源 JSON 映射到目标模式。测试框架(Postman、REST Assured)使用 JSONPath 断言验证响应结构和值。日志分析从 JSON 格式的日志中提取相关字段。GraphQL 和 OpenAPI 工具使用 JSONPath 进行模式遍历和验证。性能:对于大型 JSON,考虑流式解析器或数据库(MongoDB 的查询语法、PostgreSQL 的 jsonb_path_query)。

常见问题

为什么 JSONPath 没有匹配到结果?

请确认路径以 $ 开头、数组索引有效、字段名拼写正确。可先用更简单的路径逐步验证。
💬

如何在任意层级查找某个键?

使用递归下降:$..author 会在所有层级查找 author。
🔍

过滤器表达式怎么写?

使用 [?(@.price < 10)],@ 代表当前项;可用 &&、|| 组合条件,如 [?(@.category=='book' && @.price<20)]。
💡

空结果与 null 有何区别?

空结果表示没有匹配;null 表示匹配项的值为 null。请检查源数据与路径表达式。
📚

大 JSON 查询很慢怎么办?

避免过度使用 ..;先收窄搜索范围再做过滤。必要时分段处理或在后端预处理。

🔗相关文档

User Comments

0 / 2000
Loading...