JSON 工具

JMESPath 查询筛选字段,再整理结果结构

先运行年龄筛选示例,再试字段投影或对象重组。点击运行或按 Ctrl/Cmd+Enter 求值,修改后需重新运行。

JMESPath 查询

JSON 输入

结果

预览按 5,000 字符分批显示,复制和下载包含完整结果。

JSON 与表达式仅在浏览器内存处理,不保存。

官方 jmespath.js 0.16.0 · 安全补丁 · 26 个标准函数

结果已过期,复制和下载已禁用。

面对云服务返回的一大段数据,通常只需要几项名称、一组状态或一个计数。用 JMESPath 查询先核对筛选条件和返回结构,可以减少把表达式写进脚本后才发现类型不符的来回修改。

这页的 JMESPath 表达式产生一个 JSON 值,而不是原始字段路径清单。结果可能是对象、数组、字符串或数字,先看清输出形状,再决定下一步如何消费数据。

为什么使用 JMESPath 查询

先过滤记录,再提取字段

先按年龄保留人员,再投影姓名,能把一组完整记录缩成名称列表。数组投影会省略求值为 null 的项,因此结果项数可能少于原数组;需要保留位置时应检查表达式结构。

多条记录经过条件筛选后,输出被保留记录的指定字段。

一次生成需要的对象结构

多选对象可以命名结果字段,函数可以计算数组长度或按属性排序。JMESPath 查询能把名称列表和计数组成同一个对象,不必先复制整段响应,再手工删除无关字段。

字段从记录中汇入新对象,旁边的集合经函数计算得到单个值。

先核对类型,再组合表达式

01

准备严格 JSON

可粘贴文本或导入本地文件。文件最多 500,000 字节,解码后输入最多 500,000 字符;注释和尾逗号不接受。导入、示例与清空先预览替换内容,应用后可撤销一次。 文件需为有效 UTF-8;不会自动删除 BOM,带 BOM 的内容会在 JSON 校验时报错。

02

明确触发一次运行

默认只手动执行,Ctrl/Cmd+Enter 也可运行。点击查询示例只换表达式,不自动求值。输入或表达式修改后,旧结果立即过期,复制和下载需等新查询成功。

03

判断值与错误的区别

null、false、0、空字符串和 [] 都可能是正常结果。预览每次增加 5,000 字符,复制与下载使用完整已接受结果;预览没展示完不等于导出被截断。

从筛选记录到组织返回值

数值条件与字段投影

JMESPath 过滤示例 people[?age >= `18`].name 先比较数值,再取姓名。数字字面量使用反引号,单引号表示原始字符串;数字 18 与字符串不是同一种类型。

多选列表与对象

用 {names: people[].name, count: length(people)} 为结果命名,并把名称数组和人数放进同一个对象。多选列表可以保留 null 位置,与自动省略空投影项的行为不同。

管道与函数组合

JMESPath 管道把左侧完整结果交给右侧继续计算。sort_by 配合 &age 按属性排序,length 返回长度;函数引用是表达式,并非普通字段名字字符串。

区分求值失败与空值

输入格式、表达式语法、未知函数、参数数量和参数类型错误分别提示。不存在的字段可返回 null,过滤没有保留记录则可返回 [],这些值不需要被改成错误提示。

语法范围与实际限制

固定引擎与函数集
采用官方 jmespath.js 0.16.0 并加入安全补丁,提供其 26 个标准函数。不支持 JSONPath、jq、group_by、正则扩展、自定义函数或任意 JavaScript。 反引号内必须是严格 JSON,裸字符串用单引号;表达式引用仅可作为函数参数,不能作为结果输出。
严格输入和数值边界
重复键、注释和尾逗号会被拒绝。输入、表达式字面量与结果中的不安全整数及数值溢出均报错;普通小数使用 JavaScript 浮点数,不能保证十进制精确运算,也不保留原数字写法。 sum 或 avg 中间累加产生不安全整数也会被拒绝,即使最终数学结果本可落在安全范围内。
有界执行与完整输出
输入最多 500,000 字符,表达式最多 2,000 字符,输出最多 2,000,000 字符,另有结构与求值预算。Worker 超过 2 秒会被停止;超限报错,不提供不完整结果下载。
不提供来源路径
返回的是单个 JSON 值,不是原字段的标准化路径列表。不做递归 JSONPath 定位、源数据编辑或 CSV 导出;缺失字段与显式 null 有时会产生相同结果。
只在当前页面内存处理
不保存表达式历史,不抓取 URL,不生成携带数据的分享链接。粘贴内容和本地文件仅在浏览器内存求值,刷新页面后当前工作不会保留。

JMESPath 查询常见问题

JMESPath 和 JSONPath 有什么区别?

JMESPath 查询可以筛选字段、调用函数,并构造新对象或列表;JSONPath 主要定位已有节点。本页只执行前者,不接受 $ 根前缀或 JSONPath 递归下降语法。

如何在 JSONPath / JMESPath 中过滤数组元素?

本页使用 JMESPath 写法,例如 people[?age >= `18`].name。把数值放在反引号中,确认源数据的 age 确实是数字;JSONPath 的条件语法应到相应工具测试。

JMESPath 的管道操作是什么?

竖线 | 将左边求值完成的整体结果作为右边输入,例如 people[].name | [0] 先取得姓名列表,再取列表第一项。它不是操作系统命令管道。

查询返回 null 和空数组 [] 有什么区别?

字段不存在或值本来就是 null 时,单次字段访问可能得到 null;过滤后无元素通常得到 []。二者都是合法 JSON 值,不能单凭 null 判定查询失败。

JSONPath 和 JMESPath 各有哪些常用实现库?

JMESPath 有 Python 的 jmespath 和 JavaScript 的 jmespath.js 等实现;JSONPath 的实现与方言较多。本页固定使用带安全补丁的 jmespath.js 0.16.0,迁移到其他运行环境时仍需核对版本与扩展。

发现查询结果或语法处理不正确?

从示例开始验证

用 JMESPath 查询逐步缩小筛选范围,再添加排序或计数;每改一处就检查结果类型,确认后再用于自己的响应数据。