JSON 转 CSV
JSON将 JSON 对象数组扁平化为 CSV(RFC 4180 引号规则),并下载为文件。
本页内容
什么是 JSON 转 CSV 转换器?#
JSON 转 CSV 转换器把一个 JSON 对象数组——绝大多数 API 和数据库返回行数据时用的形状——写成 CSV 文本(逗号分隔值)。每个对象变成一行,每个顶层键变成一列,第一行是字段名。产出的是纯文本,电子表格、数据工具、数据库都能直接导入。
CSV 看着简单,真要写对并不容易。各地都能正确解析的那个格式叫 RFC 4180:含有逗号、双引号或换行的字段,必须用双引号包起来,而字段里原本就有的双引号要写成两个("")。行与行之间用 CRLF 分隔,不是光秃秃的换行。哪一条搞错了,像 Smith, John 这种名字、或者 He said "hi" 这种值,就会在下游悄悄错列——电子表格要么多出一列,要么把某个字段截断。
本转换器把这些都替你处理好了,还要应付 JSON 是层级结构、CSV 是扁平的这一尴尬:嵌套对象被拍平成点号列(address.city),无法拍平的数组或对象字段则序列化成 JSON 文本塞进单元格。你还可以选分隔符——逗号、分号、制表符、竖线——因为”CSV”在不同地区意味着不同的东西。
怎么使用#
- 把一个 JSON 对象数组粘进左侧 输入 框。也接受单个对象,或把行包在单个键下的对象(比如
{"data": [...]})。 - 选 分隔符(Delimiter)——
,(默认)、;、Tab或|。分号是不少欧洲地区 Excel 所期待的;制表符给出 TSV。 - 勾上 拍平嵌套(Flatten nested,默认开启),把嵌套对象展开成点号列。取消勾选则把嵌套对象作为 JSON 文本留在单个单元格。
- CSV 实时出现在 输出 框,该加引号的地方都加好了。状态栏报告行数。
- 点 下载(Download)保存
data.csv,或点 复制(Copy)把文本取到剪贴板。 - 点 示例(Sample)载入一份两行小数据;点 清空(Clear)重置两边。
主要特性#
- RFC 4180 引号规则。 字段在规范要求时才包裹,内部引号在该加倍时加倍,所以值里的逗号、引号、换行绝不会破坏列结构。
- CRLF 行尾。 输出用 Windows 风格换行,在 Excel 等电子表格软件里跨平台兼容性最好。
- 分隔符可选。 逗号、分号、制表符、竖线——按下游工具的期待来选,引号逻辑会随所选分隔符自适应。
- 点号拍平。 嵌套对象展开成具名列,里面的字段可以独立出来;数组和拍不平的对象变成 JSON 文本单元格,不会被丢弃。
- 参差行列对齐。 表头是所有行所有键按首次出现顺序的并集,所以多字段或少字段的行依然能对齐。
实例演示#
点 示例,输入是一个两行数组:
[
{ "name": "Ada Lovelace", "role": "Engineer", "skills": ["math", "logic"] },
{ "name": "Bob", "role": "PM", "skills": ["docs"] }
]
分隔符选 ,、拍平嵌套 开启时,列是 name、role、skills。skills 是数组,被序列化成 JSON 文本;因为这段文本里既有逗号又有双引号,所以要加引号、并把内部引号加倍:
name,role,skills
Ada Lovelace,Engineer,"[""math"",""logic""]"
Bob,PM,"[""docs""]"
注意转换器悄悄做对的两件事。Ada Lovelace 没有加引号,因为它只含一个空格——没有分隔符、没有引号、没有换行——加引号毫无意义。而 Ada 的 skills 单元格确实加了引号并加倍了内部引号,因为它同时含逗号和 ",不加就会让这一行错列。
把 分隔符 切到 ;,skills 单元格里的逗号不再和分隔符冲突,但这个字段仍然要加引号——因为里面有双引号。转换器只要遇到 RFC 4180 的任何一个触发条件就会加引号,不是只看分隔符。
常见问题#
为什么我数据里的双引号被加倍成了 ""?#
这是 RFC 4180 在加引号的字段里嵌入字面双引号的规矩:写两次。一个像 He said "hi" 的值,在 CSV 里变成 "He said ""hi"""——外层引号包裹字段(因为它含 "),里面每个 " 加倍,好让解析器知道这是数据、不是字段结尾。能正确读 CSV 的工具在导入时会把它们还原成单个引号。
我的字段里有逗号,会不会把列搞乱?#
不会。任何含分隔符、双引号、回车或换行的字段都会被自动包上双引号,所以像 Smith, John 这样的值会变成 "Smith, John",老老实实待在一个单元格里。你完全不用手动转义。
为什么我该选分号或制表符,而不是逗号?#
因为地区差异。不少欧洲地区的 Excel 默认用 ; 作列表分隔符,逗号分隔的文件打开后会被一股脑塞进一列,得重新导入才行。制表符分隔(TSV)在你的数据可能同时含逗号和分号时最稳妥——真实值里几乎不会出现制表符。按下游工具的期待来选。
嵌套对象或数组字段会怎样?#
拍平嵌套 开启时,嵌套对象展开成点号列(address.city、address.zip),每个内部值各占一列。数组字段无法无损拍平成列,所以序列化成 JSON 文本塞进单元格——比如 ["math","logic"]。什么都不丢;如果你想要每个数组元素各占一行,先把 JSON 重组一下。