JSON 转 Excel
把 JSON 数组转成可打开的 xlsx 表格
JSON 数据
转换结果
最后更新:2026-10-11
工具介绍
把 JSON 交给同事看,不如转成一张能直接打开的表格。本工具把 JSON 数组转成标准 xlsx 文件:所有记录出现过的字段会合并成列(而不是只看第一条,那样会静默丢掉后面才出现的字段),嵌套对象展平成 user.addr.city 这样的点号路径,数字和布尔值按真实类型写入而不是当文本,空值留成真正的空格。生成的 xlsx 是完整合法的 Office 文件,双击就能用 Excel、WPS 或 Numbers 打开。整个过程在浏览器本地完成,数据不上传 —— 接口返回的用户数据、订单记录都不必经过第三方服务器。
功能特性
字段取所有行的并集
只按第一行决定列,会静默丢掉后面才出现的字段,属于数据丢失而非报错。这里遍历所有记录取字段并集,并保持首次出现的顺序。
嵌套对象展平
user: { name, addr: { city } } 会变成 user.name 与 user.addr.city 两列,层级用点号连接,分隔符可自定义。
类型正确写入
数字写成数值格、布尔写成 TRUE/FALSE,这样在 Excel 里能直接求和、筛选、排序 —— 如果全写成文本,这些操作都会失效。
空值留成真空格
JSON 的 null 会写成空白单元格,而不是字符串 "null"。后者在 Excel 里会被当成有效文本参与统计。
中文工作表名
工作表名可自定义,中文名能正确写入并在 Excel 里正常显示。
自动列宽
按内容显示宽度估算列宽,中文按两个字符宽度计算,打开时不用手动拉列。
怎么用
- 1
粘贴 JSON
把 JSON 数组粘进输入框,或上传 .json 文件。
- 2
确认表格预览
检查识别出的列与数据是否符合预期,必要时调整展平选项。
- 3
设置工作表名
给生成的工作表起个名字,支持中文。
- 4
下载 xlsx
点击下载,得到一个可直接用 Excel 打开的文件。
参数说明
- JSON 数据
- 顶层应为数组;单个对象会自动当作只有一行的表格处理。
- 工作表名
- 生成的 sheet 名称,不能含 : \ / ? * [ ] 等字符,长度上限 31。
- 展平嵌套
- 开启后把嵌套对象展平成点号路径,关闭则整个对象以 JSON 文本写入一格。
- 分隔符
- 展平时用的连接符,默认是点号,可改成下划线等。
适用场景
- 把接口返回的 JSON 转成表格发给运营或业务同事
- 导出用户列表、订单记录做进一步统计
- 把配置文件里的数组整理成可对比的表格
- 在没有编程环境时快速把 JSON 数据变成可筛选的表格
- 把嵌套的日志数据摊平成一行一条便于透视
常见问题
关于这个工具,你可能会问
生成的 xlsx 直接用 Excel 打开会不会提示文件损坏?
不会。xlsx 本质上是一个 ZIP 压缩包,里面装着几个规定好的 XML 文件。只要这几部分结构正确,任何符合标准的表格软件都能打开。这里生成的文件包含完整的必需部件,并用 Python 的 openpyxl 库实际打开验证过 —— 中文工作表名、数字与布尔的类型、特殊字符转义、前后空白保留都逐一核对过,这些验证结果被固化成了自动化测试,防止以后改动时出现退化。
为什么不用现成的表格库?
因为与本站其它工具同样的理由:数据不出浏览器。引一个第三方库本身不违反这个承诺,但用户无法验证那个库是否会把数据发到某处,这个疑点就足以让人不敢用它处理真实数据。而生成 xlsx 所需的全部能力(压缩、XML 拼装)浏览器原生就有,自己实现完全可行,代价只是需要额外验证正确性 —— 这份代价我们用交叉验证和回归测试来承担。
数字会变成文本吗?
不会。检测到数字就用数值类型写入,布尔值写成 TRUE/FALSE。这一点很重要:如果全部按文本写,单元格右上角会出现绿色小三角,求和得到 0,排序也变成按字符串比较(于是 "10" 排在 "9" 前面)。不过要注意,如果 JSON 里本来就是字符串 "123"(带引号),那里会保持文本,因为那是原始数据的真实类型。
嵌套的对象和数组怎么处理?
默认会把嵌套对象展平成点号路径,例如 user: { addr: { city: "北京" } } 得到一列 user.addr.city。数组则默认整体序列化为 JSON 文本放进一格。你可以在选项里切换:关闭展平会把整个对象以 JSON 文本写入单格,适合只想保留原始结构的场景。展平深度有上限,超过时会明确提示而不是无限展开把列数撑爆。
null 和空字符串有区别吗?
有,且都会保留。JSON 的 null 会写成真正的空白单元格(Excel 里就是空),空字符串 "" 则写成空文本。两者在 Excel 里看起来都像空格,但筛选和公式处理时行为不同,所以不做合并。这也是为什么不会把 null 写成字符串 "null"。
最多能转多少行?
理论上限是 Excel 本身的上限,即 1048576 行、16384 列。实际上真正的限制是你的浏览器内存 —— 几十万行会明显变慢。列数还有单独的上限,因为列太多会让表格难以使用,超过时会提示。日常的接口数据、导出报表都远在这条线以下。
为什么第一列不是我 JSON 里的字段顺序?
列顺序按字段在所有记录里**首次出现**的位置决定。如果某条记录里字段的书写顺序与其它记录不同,列的位置会以最早出现的那条为准。这样既保证了所有字段都被收录,又让输出顺序稳定可预期 —— 同一个输入每次得到的列顺序都一样。
下载的文件名可以改吗?
可以,浏览器会弹出保存对话框让你决定文件名和位置(取决于你的浏览器设置)。工作表名则是在页面上设定的,它与文件名是两件事:文件名是磁盘上的标识,工作表名是 Excel 打开后底部标签页上显示的文字。