JSON Path 在线查询工具用来干一件事:把一段 JSON 丢进去,再写一条 JSONPath 表达式,立刻看到匹配到的节点。它解决的是「JSON 太大、层级太深、肉眼翻不动」的问题。比如你从接口拿到一份 300KB 的订单 JSON,里面有 200 条记录,每条又嵌套了用户、商品、物流三层,你只想确认所有订单里 status 为 "paid" 的 orderId 有哪些,手点折叠树要点上百次;直接写 $.data.orders[?(@.status=='paid')].orderId 就能一次列出来。写代码调试、对接口返回值、查配置文件、核对埋点数据时都能用。所有解析和匹配都在浏览器本地跑,数据不出本机。
| 对比维度 | 本工具 | 手工/替代做法 |
|---|---|---|
| 查询 200 条嵌套记录 | 输入表达式后约 50ms 内返回全部匹配 | 在编辑器里逐层折叠展开,通常要 3 到 10 分钟 |
| 过滤条件 | 支持 ==、!=、<、<=、>、>= 及 &&、|| 组合 | 靠肉眼比对或写临时脚本,改一次条件要重跑一次 |
| 环境依赖 | 浏览器打开即用,无需安装 | 需装 Python/Node 并引入 jsonpath 库,约 10 到 30MB 依赖 |
| 数据隐私 | 全程本地,0 次网络上传 | 在线接口类工具会把 JSON 发到远端服务器 |
| 结果导出 | 一键复制或下载 .json | 手工摘抄易漏,脚本需自己写文件输出逻辑 |
JSON 是数据格式,JSONPath 是查询语法,类似 XPath 之于 XML。JSON 用 {} 和 [] 描述结构,JSONPath 用 $ 表示根、. 或 [] 取子节点、* 通配、.. 递归下降。例如 $.store.book[0].title 只取第 1 本书标题,而 $.store.book[*].title 会返回全部 4 本。它本身不是标准文件格式,RFC 9535 在 2024 年才把它规范化为正式标准。
从 0 开始。$.store.book[0] 是第 1 本,[1] 是第 2 本。负数下标在部分实现里表示倒数,如 [-1] 取最后一个,但 RFC 9535 未强制要求,本工具按常见实现支持。切片写法 [start:end:step] 左闭右开,例如 [0:2] 取前 2 个元素,[::2] 每隔一个取一个。越界下标返回空结果,不会报错。
格式是 [?(@.字段 运算符 值)],@ 代表当前节点。支持 ==、!=、<、<=、>、>=,字符串要加单引号,如 [?(@.price < 10)] 或 [?(@.category=='fiction')]。多个条件用 && 和 || 连接,例如 [?(@.price < 10 && @.stock > 0)]。注意数字不要加引号,否则会按字符串比较,'10' < '9' 会成立。
.. 表示在任意深度查找同名键,不管嵌套多少层。比如 $..author 会扫描整份 JSON,把所有叫 author 的字段值都找出来,样例数据里会返回 4 个作者名。它很方便但代价高:对 1MB 的 JSON,递归下降通常比精确路径慢 5 到 20 倍,因为要遍历每个节点。数据量大时优先写明确路径,如 $.store.book[*].author。
常见原因有 4 个:键名大小写不匹配(JSON 区分大小写,Name 和 name 不同);路径多写或少写了一层,比如实际是 $.data.list 却写成 $.list;过滤条件类型不对,数字字段用了引号;JSON 本身格式错误,比如末尾多了逗号或用了单引号。先确认 JSON 能正常解析,再逐段缩短表达式定位问题。
不会。JSON 解析、JSONPath 匹配、结果渲染全部在浏览器里用 JavaScript 完成,没有网络请求发送你的数据。你可以打开开发者工具的 Network 面板,查询过程中不会出现携带 JSON 内容的请求。断网状态下工具依然可用。这也意味着结果只存在当前页面,刷新或关闭标签页后输入内容不会保留。
适用范围:标准 JSON(RFC 8259),支持对象、数组、字符串、数字、布尔、null。JSONPath 语法参考 RFC 9535,覆盖 $、.、[]、*、..、切片和过滤表达式;函数扩展(如 length()、count())未全部实现。单个文件建议不超过 5MB,超过后浏览器渲染会明显变慢。精度方面,数字按 IEEE 754 双精度解析,超过 2^53 的整数可能丢精度。隐私:所有计算在浏览器本地完成,不上传、不存储、不记录。