工具
指南

JSON 转 Excel 转换器

JSON

使用 SheetJS 将 JSON 数组转换为 Excel .xlsx 工作簿并下载。

100% 客户端 无后端

不获取远程 URL;请直接粘贴你的 JSON。

输入
输出
本页内容

什么是 JSON 转 Excel 转换器?#

JSON 转 Excel 转换器把一份表格形状的 JSON——通常是一组相似对象组成的数组——产出一个真正的 .xlsx 工作簿,可以用 Excel、Google Sheets 或 LibreOffice 打开。每个对象变成一行,每个顶层键变成一列,工作簿的第一行是表头。输出是一个实打实的二进制电子表格文件,不是改了后缀名的 CSV。

它填的是 JSON 系统和电子表格人之间的缝。后端可以倒出一千条 JSON 记录,但人类分析师要的是放进 Excel 里做透视、筛选、图表。转换器还要应付真实数据的各种乱:嵌套对象、某些行有某些行没有的字段、以及数组类型的字段——它们在网格里没有天然的落脚点。

有两个约定在干重活。嵌套对象会用点号键拍平——{"address": {"city": "London"}} 变成一列 address.city。数组字段(以及没被拍平的对象)会被序列化成 JSON 文本塞进单元格,因为一个电子表格单元格只能装一个值,装不下嵌套结构。结果是一张扁平、矩形的表,电子表格软件能毫无怨言地打开。

怎么使用#

  1. 把一个 JSON 对象数组粘进左侧 输入 框。也接受单个对象,或把行包在单个键下的对象(比如 {"data": [...]})。
  2. 勾上 拍平嵌套(Flatten nested,默认开启),把嵌套对象展开成点号列。如果你想让嵌套对象作为 JSON 文本留在单个单元格里,就取消勾选。
  3. 输出 框显示一段制表符分隔的预览,和将要落进工作表的内容一模一样——先是表头行,再是数据行。状态栏报告导出了多少行。
  4. 下载 .xlsx(Download .xlsx)保存工作簿。文件在你的浏览器里生成、直接下载,没有服务端。
  5. 示例(Sample)载入一份小型员工数据;点 清空(Clear)重置两边并禁用下载按钮。

主要特性#

  • 真正的 .xlsx 文件,不是改名的 CSV。 工作簿由 SheetJS 生成、以二进制下载,Excel 能原生打开,列、类型、工作表结构都正确。
  • 脏数据下列序稳定。 列由所有行的键取并集、按首次出现顺序计算。参差不齐的行不会让列错位——缺的字段就是一个空单元格。
  • 点号拍平。 嵌套对象展开成具名列(address.cityaddress.zip),里面的值在工作表里可以单独筛选和排序。
  • 制表符预览。 输出框和工作表内容完全一致,下载前就能核对形状。
  • 纯客户端。 解析、拍平、生成工作簿全在你浏览器里跑,数据不离开本页。

实例演示#

示例,输入是三条员工记录组成的数组:

[
  { "id": 1, "name": "Ada Lovelace", "role": "Engineer",  "salary": 95000,  "skills": ["math", "logic"] },
  { "id": 2, "name": "Bob",         "role": "PM",        "salary": 120000, "skills": ["docs", "plan"] },
  { "id": 3, "name": "Grace",       "role": "Architect", "salary": 150000, "skills": ["systems", "c", "cobol"] }
]

三行的键相同,所以列依次是 idnamerolesalaryskillsskills 是数组,所以被序列化进每个单元格。制表符预览是:

id	name	role	salary	skills
1	Ada Lovelace	Engineer	95000	["math","logic"]
2	Bob	PM	120000	["docs","plan"]
3	Grace	Architect	150000	["systems","c","cobol"]

下载 .xlsx,你拿到一个工作簿,其第一个工作表就是这串内容,表头行是 id / name / role / salary / skills。在 Excel 里,salary 会被当作数字(能求和、求平均),skills 是文本。

如果再加一行漏掉 salary 的记录,转换器依然产出这五列,只是把那个单元格留空——不会错列,下游数据不会乱。

常见问题#

为什么我的嵌套对象变成了带点号的列名?#

那是 拍平嵌套 选项在起作用。一个像 "address": {"city": "London", "zip": "NW1"} 的字段塞进一个单元格里并不好用,所以它被展开成 address.cityaddress.zip 两列——在 Excel 里各自可以筛选、排序。如果你想把整个对象作为 JSON 字符串留在单个 address 单元格里,关掉这个选项。

为什么我的数组在单元格里显示成 ["math","logic"]#

电子表格单元格只装一个值,而 JSON 数组是嵌套结构,所以它被重新序列化成 JSON 文本、原样放进单元格。这样数据无损——什么都不丢——之后还能再解析。如果你想要每个数组元素各占一行,先把源 JSON 重组一下(每个元素一条记录)再转。

我的各行字段不一样,列会怎样?#

转换器取所有行所有键的并集,按首次出现的顺序作为表头。某行缺某个字段,对应单元格就是空的。所以加一行多了一个 manager 字段,就多一列 manager;没有这字段的行留空,已有的列一点不动。

生成 .xlsx 时我的数据会被上传到哪儿吗?#

不会。解析、拍平、SheetJS 生成工作簿全在你浏览器里完成。下载是从内存缓冲区直接交给浏览器的保存对话框产出——没有后端,没有网络请求。