JSON 转 Excel / CSV
接口返回的数据、后台导出的 JSON,粘贴进来就能转成 Excel 或 CSV 表格。嵌套字段自动展开成列,中文不乱码,数据不离开你的浏览器。
🔒 JSON 在你自己的设备上转换,不会上传到任何服务器。设置会记在这个浏览器里,下次打开不用重选。
JSON 怎么转成 Excel 表格
- 把 JSON 粘贴到输入框里,或者把 .json、.jsonl 文件拖到上面的框里,一次放多个也行。粘贴的内容边输边转,不用点按钮。
- 看一眼下方的预览表。接口返回里有好几组数据时,在数据来源里选要哪一组;嵌套对象、数组、分隔符按需要改,改完立刻重新转换。
- 点下载 Excel得到 .xlsx,点下载 CSV得到 CSV,也可以复制 CSV直接粘到别处。转了两个以上的文件,用全部下载(ZIP)一次打包。
哪些 JSON 能转成表格
表格是一行一行的,所以 JSON 里要有「一条条记录」。最常见的是对象数组,比如 [{"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}],每个对象一行。
接口返回的数据通常还包着一层,例如 {"code": 0, "msg": "ok", "data": {"list": […], "total": 120}}。工具会往里找,默认选 data、list、items、records 这类常见名字下面最大的那组记录,这个例子选中的就是 data.list;选得不对,在预览上方的「数据来源」里换一组即可。
以 ID 为键的对象,如 {"u1001": {"昵称": "小王"}, "u1002": {"昵称": "小李"}},会变成每个键一行,键名放进 key 列。二维数组按原样逐行输出,不另加表头;每行一条 JSON 的 JSON Lines 文件,一行就是一条记录。只有一个对象也能转,可以排成一整行,也可以排成「每个字段一行」的两列表。
嵌套字段怎么变成列
拿一段电商订单数据举例:[{"订单号": "202410280001234567", "收货人": "张三", "地址": {"省": "广东", "市": "深圳"}, "标签": ["新客", "包邮"]}, {"订单号": "202410280001234568", "收货人": "李四", "地址": {"省": "浙江", "市": "杭州", "区": "西湖区"}}]
转出来是 6 列:订单号、收货人、地址.省、地址.市、地址.区、标签。表头收集的是所有记录里出现过的字段,不只看第一条;只有第二条才有的「地址.区」排在「地址.市」后面,不会被挤到最右边。张三没有区,李四没有标签,这两个格子留空。标签这种只装着文字或数字的数组,用「; 」连成一格:新客; 包邮。
数组里装的是对象时,比如订单里的商品明细 [{"名称": "T恤", "数量": 2}],会整段写成 JSON 文本放进一个格子,既不拆成多行,也不展开成「商品.0.名称」这种每行都不一样的列。想保留原来的层级,把「嵌套对象」改成「保留 JSON 文本」:顶层字段照样各占一列,嵌套的对象整段写成 JSON 放进格子里。「数组」也改成「保留 JSON 文本」的话,只装文字、数字的数组同样写成 JSON,不再用「; 」连起来。
几个常见用法
- 后台只能看、不能导出:页面上的表格多半来自一个接口。用 Chrome 或 Edge 打开那个页面,按 F12 打开开发者工具,切到「网络」(Network)面板后刷新,在 Fetch/XHR 里找到返回数据的那条请求,右键选「复制」›「复制响应」,粘贴到上面的输入框就行。
- 电商订单对账:开放平台接口或 ERP 导出的订单 JSON 里套着收货地址、商品明细,转成表格后就能在 Excel 里筛选、做数据透视。订单号这类长数字怎么保持原样,见下文。
- 多语言文案交给翻译:前端项目里的 zh.json、en.json 是一层套一层的对象。在「数据来源」里选「每个字段一行(字段名、值)」,得到 field、value 两列,field 是 home.title 这样的完整路径,译文填好后,开发同事可以按路径对回 JSON。
- 日志和埋点:每行一条 JSON 的 .jsonl、.ndjson 文件按 JSON Lines 读,一行一条记录;MongoDB 的 mongoexport 默认导出的也是这种格式。拖进来的文件不看后缀,.log 这类文件也会尝试读取。
Excel 打开 CSV 中文乱码怎么办
CSV 是纯文本,文件里并不注明自己用的是哪种编码。中文版 Windows 上的 Excel 双击打开 CSV 时,如果文件开头没有 BOM 标记,往往会按系统默认的 GBK(代码页 936)去读;网页、接口和程序生成的 CSV 却几乎都是 UTF-8,两边对不上,「名字」就成了「鍚嶅瓧」这样的乱码。
「UTF-8 BOM(中文不乱码)」默认勾选,会在文件最前面写入 EF BB BF 三个字节,Excel 看到就会按 UTF-8 读。别人发来的、没带 BOM 的 CSV,可以在 Excel 里走「数据 › 从文本/CSV」,把「文件原始格式」选成「65001: Unicode (UTF-8)」再加载。最省事的还是直接下载 .xlsx,Excel 文件里的文字本来就按 Unicode 保存,没有猜编码这一步。
反过来,CSV 是给程序读的,比如导入数据库或交给 Python 脚本,最好取消勾选 BOM,有的程序会把这三个字节当成第一列列名的一部分。另外,拖进来的 JSON 文件不必是 UTF-8:老系统导出的 GBK(GB18030)编码文件,工具会自动认出来,中文照样正常显示。
身份证号、订单号变成 1.10101E+17
Excel 的数字最多保留 15 位有效数字。18 位的身份证号 110101199003071234 写在普通 CSV 里,Excel 会把它当数字读进去,存成 110101199003071000,单元格里显示成 1.10101E+17 这样的科学计数法。后三位已经变成 0,文件一保存就再也找不回来。十几二十位的订单号、物流单号、银行卡号,遭遇都一样。
「长数字、开头的 0 原样保留」默认勾选。CSV 里 16 位及以上的整数、以 0 开头的数字串、以 + 开头的号码,都会写成 ="110101199003071234" 的样子,Excel 把它当作一个返回文字的小公式,显示出来就是原来的号码。预览下方会提示有多少个格子做了这样的处理。下载 .xlsx 则用不着这一步:JSON 里的字符串一律存成文本格,16 位及以上的整数也存成文本,一位不丢。
12 到 15 位的数字,比如 13 位的毫秒时间戳,数值本身不会丢,只是 Excel 的「常规」格式会把 12 位及以上的数显示成科学计数法。选中这一列,把单元格格式设成「数值」、小数位数 0,完整的数字就出来了。
开头的 0、+86 和被改成日期的值
邮编 010010、工号 00123 这类以 0 开头的编号,用 Excel 打开普通 CSV 时,开头的 0 会被吃掉;写成 +8613800138000 的手机号会丢掉加号,变成一个 13 位的数字,还显示成科学计数法。勾选「长数字、开头的 0 原样保留」后,这两类值都会原样显示。
日期是这个选项管不到的。商品规格里的「1-2」、尺码「3/4」这样的文字,Excel 打开 CSV 时会自作主张改成 1 月 2 日、3 月 4 日,工具不会替你拦。数据里有这类值,请下载 .xlsx,文本格里的内容 Excel 不会再去猜。
还要知道,="…" 这个写法是专门照顾 Excel 的。CSV 要导入数据库、交给程序处理,或者对方用的是别的表格软件,就可能原样读到 ="00123" 这几个字符,这时请取消勾选。拿不准对方用什么软件打开,就发 .xlsx。
「数据来源」怎么选
只要 JSON 顶层是一个对象,预览上方就会出现「数据来源」下拉框,列出能当作表格行的位置和各自的行数。工具会往对象里找几层,既找对象数组,也找以 ID 为键的对象。
默认的选法是这样的:整个 JSON 本身就以 ID 为键时,每个键一行;不是的话,优先选 data、items、results、list、records 这类常见名字下最大的数组;这类名字都没有,就选行数最多的那组;一组也找不到,就把整个对象当成一行。下拉框里还有三个选项:
- 「顶层的每个键各一行」:顶层的值有一半以上是对象时出现,比如按开发、正式环境分块写的配置文件。
- 「整个 JSON 作为一行」:对象里的所有字段展开后排成一行。
- 「每个字段一行(字段名、值)」:只有两列,第一列是 a.b.c 这样的完整路径,第二列是值,适合多语言文案和字段特别多的单个对象。
多大的数据能转
- 单个文件最大 200 MB。一次粘贴超过 100 万个字符时,内容不放进输入框,免得页面卡住,照样在下方列表里转换。
- 预览只显示前 100 行、30 列,下载的文件是完整的。
- 「复制 CSV」最多复制 1,000 万个字符,再多按钮会变灰,请改用下载。
- Excel 每张表最多 1,048,576 行、16,384 列,每个单元格最多 32,767 个字符。超出时预览下方会提醒,.xlsx 只保留放得下的部分。字段特别多的嵌套 JSON 可能超过列数上限,把「嵌套对象」改成「保留 JSON 文本」,列数会少很多。
- 在电脑上的 Chrome 里实测,25 MB、10 万条记录的文件约半秒转完,生成同样内容的 .xlsx 约 1 秒。手机内存小得多,特别大的文件建议在电脑上转。
JSON 报错怎么改
内容不是合法 JSON 时,工具会指出第几行第几列出错,把那一行摘出来,用 ^ 标出位置,并写明原因。下面几种最常见:
- Python 直接 print 出来的字典:单引号、True、False、None 都不是 JSON。请写脚本的同事改用
json.dumps(data, ensure_ascii=False)输出。 - 从前端代码里复制的对象:键名没加双引号,或者用了单引号。在浏览器控制台运行
JSON.stringify(obj),把结果粘过来。 - 最后一项后面多了逗号:手动删掉最后一条记录时最容易留下,把 } 或 ] 前面那个逗号删掉。
- 带注释的配置文件:标准 JSON 不允许 // 和 /* */ 注释,删掉再转。
- 内容不完整:从日志、控制台复制长内容时被截断了,缺了结尾的 } 或 ],重新完整复制一次。
- 两段 JSON 连在一起:把每段压成一行、一行一段,就会按 JSON Lines 处理。
为什么不用上传
订单、会员这类数据里常有手机号、收货地址、身份证号,都属于个人信息。贴进一个会把内容发到服务器的在线工具,等于把数据交给了一个你并不了解的第三方。这个页面的解析、展开和生成 CSV、Excel 都在浏览器里完成,内容不会发出去;浏览器里记下的只有你选过的选项,不包括数据本身。
不用这个工具,还能怎么转
- Excel 自带的 Power Query:Microsoft 365 版的 Excel(Windows)里选「数据 › 获取数据 › 来自文件 › 从 JSON」,导入后点「到表」,再点列标题上的展开按钮,一层层展开。适合每周都要从同一个接口导数据的情况。
- Python:用
pd.json_normalize(data)展开嵌套字段,再用.to_excel("out.xlsx", index=False)保存,需要装 pandas 和 openpyxl。要输出给 Excel 打开的 CSV,记得加上encoding="utf-8-sig",否则中文同样会乱码。 - 反过来,Excel 转 JSON:这个工具只做 JSON 转表格这一个方向。用 pandas 的话,
pd.read_excel("in.xlsx")读入表格,再用.to_json("out.json", orient="records", force_ascii=False)输出,每行一个对象,中文不转义。
常见问题
JSON 怎么转 Excel?
把 JSON 粘贴到上面的输入框,或者拖入 .json 文件,确认预览没问题后点「下载 Excel」。得到的 .xlsx 只有一张表,表名取自文件名(粘贴的内容叫 Sheet1);表头加粗并冻结,往下翻也看得见,每列都带筛选按钮,列宽按内容自动设好。
数据会上传吗?
不会。解析和转换都在你自己设备的浏览器里完成,粘贴的内容、拖入的文件都不会发送到任何服务器,下载的 CSV 和 Excel 也是在本机生成的。页面只会在这个浏览器里记住你选过的选项。
能一次转多个文件吗?
能。一次拖入或选择多个文件,每个文件在列表里占一行,显示行数和列数,各有 CSV、Excel 下载链接;点哪一行就预览哪一行。两个以上转换成功后,可以用「全部下载(ZIP)」把所有 CSV 打包下载。
用 Excel 打开 CSV 中文乱码怎么办?
保持「UTF-8 BOM(中文不乱码)」勾选,重新下载一次就好。已经拿到手的 CSV,在 Excel 里用「数据 › 从文本/CSV」导入,文件原始格式选 65001: Unicode (UTF-8)。也可以干脆下载 .xlsx,没有编码问题。
身份证号后几位变成 0 怎么办?
Excel 只保留 15 位有效数字,18 位身份证号被当成数字读进去,后三位就成了 0。勾选「长数字、开头的 0 原样保留」再下载 CSV,或者直接下载 Excel,身份证号会以文本保存,一位不少。已经被 Excel 改过并保存的文件没法还原,只能从原始 JSON 重新转。
嵌套数组怎么处理?
只装着文字、数字的数组,用「; 」连成一格;数组里有对象或数组时,整段写成 JSON 放在一格里。一条记录不会被拆成多行。如果这组数组在单个对象里(比如一张订单的商品明细),它会出现在「数据来源」里,选中后每件商品一行。
数据量很大能转吗?
单个文件最大 200 MB,转换放在后台线程里跑,页面一般不会卡住。Excel 每张表最多 1,048,576 行,超出的部分 .xlsx 放不下,页面会提醒。手机内存小,特别大的文件建议用电脑转。
为什么 1.50 变成了 1.5?
JSON 里的 1.50 和 1.5 是同一个数,工具按 JavaScript 的写法输出数字,所以写成 1.5,1.0 也会写成 1。金额要显示两位小数,在 Excel 里把这一列设成两位小数即可;一定要原样保留写法的,需要 JSON 里本来就用字符串,比如 "1.50"。
能把 Excel 转回 JSON 吗?
这个工具只做 JSON 转 CSV、Excel 这一个方向,不能反向转换。装了 Python 的话,可以用 pandas 读取 Excel 再输出 JSON,写法见上文。
转出来的列是按什么顺序排的?
按字段第一次出现的顺序排,嵌套字段跟着它的上一级走:地址.区 即使只在后面的记录里出现,也会排在 地址.市 旁边。有一个例外:在同一个对象里,纯数字的键名(比如 "2024")会排在其他键前面,这是 JavaScript 对象本身的规则。