JSON转CSV

在你的设备上运行 · 你的文件从不离开你的设备。

拖入.json文件,或者直接粘贴接口返回的JSON,得到一个能在Excel、WPS、Google表格或任何导入界面打开的CSV。顶层是列表就一项一行;否则使用文档里最长的记录列表,所以{"results": [...], "count": 2}每个结果一行;里面没有列表的对象变成一行。

规则是固定的,结果可以预期:嵌套对象变成点分隔的列(address.city),纯值列表在一个单元格里用分号连接,记录里的对象列表变成带序号的列(items.0.name)。表头是所有出现过的键的并集,按首次出现的顺序排列,缺字段的记录对应单元格留空。

CSV按RFC 4180写出——含逗号、引号或换行的字段会正确加引号——UTF-8编码,可选加BOM,让Excel正确显示各种文字、重音字母和符号。以=、+、-或@开头的单元格前面会加一个撇号,电子表格就会把它当文本显示,而不是当公式执行。下载前能看到前200行的预览,什么都不会离开你的设备。

如何JSON转CSV

  1. 拖入JSON文件,或者把JSON粘贴到文本框。
  2. 选择输出的列分隔符(默认逗号),决定要不要加Excel的BOM。
  3. 点击“转换为CSV”,看一下前几行的预览。
  4. 下载.csv。

支持的格式与限制

输入
JSON(.json)——文件或粘贴的文本,UTF-8
输出
CSV,RFC 4180,UTF-8,CRLF换行,可选BOM
嵌套
对象→点分隔的列;值列表→用;连接
分隔符
逗号、分号、制表符或竖线
运行位置
在浏览器本地完成,不上传

不适用于: 里面没有列表、层层嵌套的单个对象——能转,但会变成一行很宽的记录,而不是一张表。

哪个列表变成行

顶层是列表,它就是行。否则工具会在文档里往下找,最深八层,找出最长的对象列表。所以{"response": {"data": {"items": [...]}}}和{"results": [...], "count": 2, "next": null}都是每项一行,结果下方那一行会写明用的是哪个列表,比如results。列表旁边的值,像count和next,不属于任何一条记录,会被略去。

两个一样长的列表,离顶层更近的那个胜出。想用较短的那个,就从它的[复制到对应的],只粘贴这一段。文档里没有对象列表时变成一行;只有一个键的外壳会被跳过,所以{"order": {"id": 7, "total": 12}}得到id和total两列。

值怎样写进单元格

文本原样复制,日期也一样,保持JSON里的写法,比如2024-01-05T10:00:00Z。true和false按单词写出。null、空列表和空对象都变成空单元格,所以在CSV里它们和缺失的字段看起来一样。

数字完全按JSON里的写法写出:1.0还是1.0,1e21还是1e21,像12345678901234567890这样的ID即使没有引号,也保留每一位。普通的JSON读取器会把这个ID变成12345678901234567000。

列表里的列表,以及本身带点的键

列表里的列表只展开一层:"m": [[1, 2], [3]]得到m.0列,内容为1;2,以及m.1列,内容为3。对象和普通值混在一起的列表会给每一项编号,所以"x": [{"z": 1}, 2]得到x.0.z和x.1。

列名是用点把键连起来得到的,所以本身带点的键可能和嵌套的键撞名:{"a.b": 1, "a": {"b": 2}}会产生两个a.b。第二个会加上后缀,列名变成a.b和a.b_2,两个值都保留。

分隔符怎么选,以及以=开头的单元格

一般选逗号。电子表格设成用逗号作小数点的语言时,逗号分隔的文件打开后常常挤在一列里,这时选分号。制表符和竖线留给明确要求它们的系统。不管选哪种分隔符,文件都以.csv命名。

以=、+、-或@开头的单元格,在电子表格看来是公式,打开时就会执行。这样的单元格前面会加一个撇号——电子表格自己用来表示“这是文本”的符号——所以=1+1写成'=1+1。-5或+3.5这样的普通数字保持不变。

常见问题

我的文件会上传到服务器吗?
不会。转换完全在你的浏览器里完成,用的是你自己设备的算力。文件不会离开你的电脑或手机;每个工具用过一次之后,断网也照样能用。
嵌套的对象和数组怎么处理?
嵌套对象会展平成点分隔的列:{"address":{"city":"北京"}}变成一列address.city。纯值列表("tags": ["a","b"])在一个单元格里写成a;b。记录里的对象列表变成带序号的列,如items.0.name、items.1.name。
我的JSON是对象不是列表,会得到什么?
文档里任何位置最长的记录列表就是行——{"results": [...], "count": 2, "next": null}每个结果一行——结果那一行会写明用的是哪个列表。列表旁边的值不属于任何记录,会被略去。里面没有列表的对象写成一行,每个键一列。
Excel打开显示乱码怎么办?
文件开头没有BOM时Excel会猜编码。“为Excel添加BOM”开关默认打开,会加上那三个字节的标记;如果对方工具要求纯UTF-8,把它关掉。

相关工具

表格与数据中的更多工具

本页的其他语言版本: English · العربية · Deutsch · Français · Español · Русский · Português · हिन्दी · Türkçe · עברית · فارسی · اردو · Bahasa Indonesia · বাংলা