工具简介
JSONPath 查询是工具派提供的在线 JSON 数据提取工具。JSONPath 之于 JSON,就像 XPath 之于 XML——用一条简洁的「路径表达式」,就能从层级复杂、动辄上百行的 JSON 里精准定位并取出你想要的数据,而无需写任何代码。
工具的用法很直观:左侧粘贴 JSON、输入表达式,右侧实时显示查询结果。它还内置了 JSON 树形结构(点击任意节点即可自动生成对应路径)、常用语法 速查面板,以及多组开箱即用的 示例数据。无论是调试接口返回值,还是系统学习 JSONPath 语法,都非常顺手。整个解析与查询过程都在浏览器本地完成,你的数据不会上传到服务器。
支持的语法包括:根对象 $、属性访问 $.name、数组索引 $[0]、通配符 $[*]、递归下降 $..、条件过滤 $[?(@.age>18)]、数组切片 $[0:3]、多选 $[name,price] 等,足以应对绝大多数 JSON 取值需求。
适用场景
- 调试 API 返回值:接口返回一大坨 JSON,只想看其中某几个字段,一条表达式立刻搞定。
- 数据清洗与提取:从日志、配置文件、爬虫结果里批量挑出符合条件的元素,例如「所有价格低于 10 的商品」。
- 学习 JSONPath 语法:配合示例数据和语法面板,边点边看结果,快速上手这套通用查询语言。
- 定位嵌套字段路径:面对陌生的 JSON 结构,点一下树形节点就能得到它的完整访问路径。
使用步骤
第 1 步:准备 JSON 数据
在左侧「JSON 数据」文本框中粘贴你的 JSON。如果手头没有现成数据,可以点击上方的「示例数据」按钮,工具内置了三组演示数据:
- 示例数据:经典的「书店」结构(
store.book数组 +bicycle对象); - 用户信息:一组用户数组(含
id、name、age、active、roles字段); - 嵌套结构:公司 → 部门 → 员工的多层嵌套结构。
点击任意一个示例按钮,会自动填入对应的 JSON 和一条示范表达式,方便直接体验。
小提示:文本框右上有「格式化」「压缩」「清空」三个小按钮。粘贴进来的单行 JSON 可以先点「格式化」,美化成带缩进的结构,阅读起来更轻松。

第 2 步:编写 JSONPath 表达式
在「JSONPath 表达式」输入框里写下查询路径。所有表达式都以 $(代表根对象)开头,例如:
$.store.book[0].title—— 取第一本书的标题;$.store.book[*].author—— 取所有书的作者;$.users[?(@.age>25)].name—— 取年龄大于 25 岁的用户姓名。
表达式框上方还提供了 4 个快捷查询按钮(如 $.store.book[*].author、$.store.book[?(@.price<10)] 等),点一下即可填入常用写法,非常适合参考格式。
第 3 步:执行查询并查看结果
点击蓝色的「查询」按钮执行;实际上你每次修改 JSON 或表达式后,工具也会自动重新查询,结果实时刷新。
右侧「查询结果」区域会列出所有匹配项,标题旁标注了结果条数,例如「查询结果 (4 条)」。每条结果用单独的卡片展示:对象和数组会自动格式化缩进,字符串、数字、布尔等基本值则直接显示。没有匹配项时显示「暂无结果」;如果 JSON 本身写错了,输入框下方会出现红色的「JSON 错误:……」提示,帮你快速定位格式问题。

第 4 步:用树形结构定位路径(强烈推荐)
不熟悉 JSON 结构、不知道字段藏在哪一层?看左下角的「JSON 树形结构」。它把整份 JSON 渲染成一棵可折叠的树:
- 点击节点前的 ▼ / ▶ 可以展开或折叠;
- 直接用鼠标点击任意字段名(key),工具会自动把该节点的完整 JSONPath 填进表达式框——这是生成路径最省事的方式,再也不用手数层级、不用担心写错。
暂时不需要树可以点「折叠」收起,需要时再点「展开」。

第 5 步:复制结果
确认结果无误后,点击结果区右上角的「复制结果」,会把全部匹配项以 JSON 数组的形式复制到剪贴板(复制成功会短暂显示「已复制」),方便直接粘贴到代码或文档中使用。
参数与选项说明
下面是工具支持的 JSONPath 语法速查(示例均以内置「书店」数据为准):
| 语法 | 说明 | 示例 |
|---|---|---|
$ |
根对象,所有表达式的起点 | $ |
$.属性名 |
访问对象的某个属性 | $.store.bicycle |
$[索引] |
按位置取数组元素(从 0 开始) | $.store.book[0] |
$[*] |
取数组所有元素,或对象的所有值 | $.store.book[*] |
$.. |
递归下降,展开整棵树的所有节点 | $..employees[*].name |
$[?(@.字段 操作符 值)] |
按条件过滤数组元素 | $.store.book[?(@.price<10)] |
$[起始:结束] |
数组切片(含起始、不含结束) | $.store.book[0:2] |
$[名1,名2] / $[0,2] |
多选:一次取多个属性或多个索引 | $.store.book[0,2] |
$['属性名'] |
用方括号加引号访问属性(属性名含特殊字符时用) | $['store']['bicycle'] |
条件过滤支持以下操作符(@ 代表当前被遍历的数组元素):
| 操作符 | 含义 | 示例 |
|---|---|---|
== |
等于(可比较数字、布尔、带引号的字符串) | ?(@.category=='fiction')、?(@.active==true) |
!= |
不等于 | ?(@.id!=2) |
> / < |
大于 / 小于(数字比较) | ?(@.age>25) |
~= |
字符串包含(左侧是字符串且包含右侧内容) | ?(@.name~=张) |
?(@.字段) |
存在性判断:该字段存在即匹配 | ?(@.isbn) |
实用技巧
- 优先点击树形节点生成路径:这是零出错的方式,尤其适合层级很深的 JSON。
- 善用快捷入口:表达式框上方的快捷查询按钮,以及右下角「常用语法」面板里的每一条语法,都可以点击直接填入表达式框,照着改即可。
- 先格式化再查询:结构清晰的 JSON 更便于对照结果。
- 过滤值要区分类型:字符串必须带引号(
?(@.category=='fiction')),数字和布尔值不带引号(?(@.price<10)、?(@.active==true))。 - 批量映射字段:用
$.数组[*].字段名可以一次性取出数组里每个元素的某个字段,例如$.users[*].name。 - 属性名含特殊字符:当字段名里有点号、空格或中文等,改用方括号加引号的写法
$['属性名']。
常见问题
Q1:为什么 $..price 返回了一大堆结果,而不只是价格?$.. 是递归下降语法,它会把整棵树的所有节点都展开返回,.. 后面紧跟的属性名在本工具中不参与过滤。如果只想取特定位置的价格,建议使用完整点路径,例如 $.store.book[*].price;也可以用组合写法 $..book[*].price 取出树中所有名为 price 的字段值。
Q2:>= 和 <= 为什么查不出结果?
这是工具当前的一个已知限制:>=、<= 会被解析器误判,导致恒不匹配、返回空。请改用 > 或 < 变通,例如把 ?(@.age>=28) 换成 ?(@.age>27),效果相同。
Q3:表达式看着没错,却显示「暂无结果」?
请逐项排查:① JSON 是否合法(输入框下方有无红色「JSON 错误」提示);② 属性名大小写是否完全一致(区分大小写);③ 数组索引是否越界;④ 过滤条件里的字符串是否加了引号。
Q4:支持用负数索引(如 $[-1])取最后一个元素吗?
不支持。索引只能是非负整数,切片也只接受非负数字。需要定位末尾元素时,可以结合数组长度使用切片,或直接在「JSON 树形结构」里点击该节点获取路径。
Q5:我粘贴的 JSON 会上传到服务器吗?
不会。解析与查询全部在你的浏览器本地完成,数据不会离开浏览器,可放心用于敏感数据。
