JSON → CSV 转换器,免费
将 JSON 对象数组转换为 CSV 或 TSV 格式。
使用方法
1. 将 JSON 对象数组(或单个对象)粘贴到输入区。
2. 选择分隔符 · CSV 选逗号、TSV 选制表符,或其他格式。
3. 点击转换以生成 CSV 输出。
4. 复制到剪贴板或下载为文件。
嵌套的对象和数组在 CSV 输出中会被序列化为 JSON 字符串。所有处理都在客户端完成 · 您的数据从不离开浏览器。
为什么 JSON 转 CSV 是如此常见的工作流
JSON 是现代 web API 的主导负载格式;CSV 则是表格数据的最小公分母格式。Excel、Google Sheets、SQL 的 LOAD DATA、R、Pandas、Tableau、Power BI 以及几乎所有 ETL 流水线都能开箱即用地摄取 CSV。所以当 API 的输出需要落到某位干系人面前的电子表格里、或者落到用于分析的数据库里时,总得有人把 JSON 摊平成行。本工具在你的浏览器里完成这步摊平,无需服务器往返,也不会上传可能敏感的数据。
CSV 格式(RFC 4180)
并不存在唯一的正式 CSV 标准,但 RFC 4180(2005 年 10 月,《Common Format and MIME Type for Comma-Separated Values (CSV) Files》)是业界最接近规范参考的文档。大家都同意的规则:
- 每条记录一行,行间以换行分隔。RFC 规定使用 CRLF;大多数现代解析器也接受 LF。
- 一条记录内的字段由单个定界符分隔,在规范形态中为逗号,但分号、Tab 或竖线在地区与历史变体中很常见。
- 每条记录应当有相同数量的字段。缺失值变成空单元格;多余的定界符是错误。
- 表头行可选;如果存在,就是第一行。
- 包含逗号、换行或双引号的字段必须用双引号括起来。
- 引用字段内部嵌入的双引号通过重复来转义:
"She said ""hello"""。 - 为 CSV 注册的 MIME 类型是
text/csv。
为什么是四种定界符而非一种
默认是逗号,但每种定界符都解决一个具体问题:
- 逗号(
,),美国、英国及其他英语本地化中的标准。当 OS 区域设置为英语时,Excel 用逗号读 CSV。在更宽的工具生态中是application/csv的默认。 - 分号(
;),欧洲大陆、拉丁美洲及其他以逗号作小数点的地区的实际默认。Excel 使用 OS 的列表分隔符,所以法语或德语区域的 Excel 会产生分号分隔的 CSV。 - Tab,TSV(tab-separated values)在科学数据、生物信息学以及任何数据本身就包含逗号(自由文本字段、地址)的场景里很常见。
- 竖线(
|),在一些遗留企业系统里受欢迎,那里的数据可能同时包含逗号、分号和 Tab。很少是第一选择,但在别的都不行时很有用。
摊平嵌套 JSON 的三种策略
JSON 是分层的,CSV 是平面的。两者之间没有通用的、无损的映射。当输入包含嵌套对象或数组时,每个转换器都必须做出选择:
- 作为 JSON 字符串内联。嵌套部分被重新序列化为 JSON 并放入一个 CSV 单元格里。这是本工具的默认做法。无损;可安全往返;消费者如需结构则需自行解析内部 JSON。
- 点号键摊平。
{address: {street, city}}变成列address.street与address.city。Pandas 的json_normalize就是这样工作的。对分析师更整洁,但深层嵌套数据下列数会爆炸。 - 行展开。数组变成多行,父字段重复。
{name: "Alice", tags: ["a", "b"]}变成两行,都带有name=Alice。最适合一对多关系;会失去「一条记录一行」的心智模型。
如果你需要点号键或行展开的输出,请在粘贴之前预处理 JSON,用一小段 Python/Node 脚本,或者 Pandas 的 json_normalize。
表头、类型往返与 Excel 的自动格式陷阱
JSON 有真正的类型系统(数字、字符串、布尔、null、数组、对象);CSV 只有字符串。约定是消费者根据上下文推断类型。本工具用所有输入对象上所有键的并集生成表头行,把缺失字段留为空单元格,把布尔写为 true/false,把 JSON null 写为空单元格。
Excel 的「帮忙」有时会伤人:
- 去掉前导零。一列形如
01234的邮编会被当作数字1234打开。变通:在 CSV 内用单引号前缀('01234),或使用 Excel 的导入向导并显式把列类型设为文本。 - 自动日期转换。像日期的字符串(
3/4/5、Mar-23)会被静默转换。同样的变通。 - 科学计数法。长数字 ID(信用卡号、大整数)会被转换为
1.23E+15并丢失精度。JSON 能精确保留到 253−1 的数;更大时请在 JSON 中以字符串形式传输。 - UTF-8 BOM 不匹配。Windows 上的 Excel 默认 Windows-1252;打开没有 BOM 的 UTF-8 CSV 会把非 ASCII 字符(é、ü、å)变成乱码。在文件开头加上 UTF-8 BOM(
)即可解决。Google Sheets 在无 BOM 时也能正确处理 UTF-8,所以 BOM 是平台相关的。
CSV 注入,一条值得知道的安全提示
如果一份 CSV 将在 Excel 或 Google Sheets 中打开,那么以 =、+、- 或 @ 开头的单元格会被解释为公式。OWASP 的 CSV Injection 页面 记录了这类攻击,用户提交的字段中若出现像 =cmd|' /c calc'!A0 的恶意串,在管理员打开导出文件时就可能执行命令。防御做法:给任何以这四个字符开头的单元格前缀一个单引号,或者用引号加前导撇号包起来。如果你导出的是用户生成内容,这点很重要。
转换器处理的常见边界情况
- 包含定界符的字段,自动加引号。逗号 CSV 中的
San Francisco, CA变成"San Francisco, CA"。 - 包含字面换行的字段,加引号;按 RFC 4180,引号内可合法出现多行内容。
- 包含双引号的字段,加引号,内部的引号被加倍:
She said "yes"变成"She said ""yes"""。 - 空数组与空对象,分别按
[]和{}序列化到对应单元格。 - 键不同的记录,所有键的并集构成表头行;缺失字段为空单元格。
- 单一对象 vs 数组,单个 JSON 对象转换为单行 CSV。
何时使用本工具
- 导出 API 响应,给希望用电子表格排序和筛选的干系人。
- 批量导入 JSON 数据 到 SQL 数据库,经由
LOAD DATA INFILE(MySQL)或COPY(PostgreSQL)。两者都期待 CSV 形态的输入。 - 在 Excel、Google Sheets、Pandas、R、Tableau 或 Power BI 中做快速数据分析。
- 从联系人 API 的 JSON 响应生成邮件列表。
- 在没有共同 API 但都会说 CSV 的系统之间迁移数据。
- 用眼睛审阅 JSON 文件,当它太重复无法直接读时,表格视图往往更易看。
隐私
CSV 导出几乎总是包含 PII,客户记录、员工数据、交易日志、联系人列表。服务器端转换让每条记录都流经第三方基础设施,于是它会出现在传输日志、服务器日志,乃至缓存响应里。基于浏览器的转换让数据留在你的机器上。此处所有的摊平与加引号都在你浏览器里的 JavaScript 中完成;不会上传。
常见错误
- 用错适合受众的定界符。把逗号 CSV 发给法语 Excel 用户会得到只有一列的文件。把定界符匹配到接收方的本地化。
- 粘贴单个对象而不是数组。单个对象会被转换为一行带键作表头的 CSV。多条记录请用数组包起来。
- 期待 Pandas 式的摊平。本工具对嵌套对象按 JSON 字符串放入单元格序列化。如果你需要
address.street这样的列,请先摊平。 - 对超大数字使用 CSV。JSON 安全表示到 253−1(约 9 千万亿)的整数。超出请以字符串传输。即便 CSV 保留了,Excel 也会把长数字 ID 弄坏。
- 在 Excel 中打开而不考虑编码。非 ASCII 字符在 Windows 下的 Excel 需要 UTF-8 BOM;Google Sheets 与现代 Excel for Web 不需要。
- 在不清洗公式前缀的情况下导出用户生成文本。以
=、+、-或@开头的单元格在 Excel 与 Sheets 中是公式。CSV 注入是真实存在的攻击,目标是打开导出文件的管理员。
常见问题
我的 JSON 含有嵌套对象,是怎么处理的?
每个嵌套对象或数组会被序列化为其 CSV 单元格内的 JSON 字符串。所以 {user: {name: "Alice", role: "admin"}} 变成一列 user,内容为 {"name":"Alice","role":"admin"}。这种方式可无损往返。如果你需要 user.name 与 user.role 分列,请用 Pandas 的 json_normalize 或一段小的摊平脚本预处理。
为什么我的非英文字符在 Excel 里看起来坏掉了?
Windows 上的 Excel 默认以 Windows-1252 打开 CSV。没有字节顺序标记 (BOM) 的 UTF-8 CSV 会显示成乱码(é → é)。解决办法:要么把文件保存为带 UTF-8 BOM,要么使用 Excel 的「数据 → 从文本」导入向导并显式选择 UTF-8,要么在 Google Sheets 里打开,它能正确处理无 BOM 的 UTF-8。
工具会处理字段内的逗号吗?
会。按 RFC 4180,包含定界符、换行或双引号的字段会被自动加上双引号。内部的双引号通过加倍来转义。所以 San Francisco, CA 变成 "San Francisco, CA",She said "hi" 变成 "She said ""hi"""。
我的 JSON 会发到服务器吗?
不会。转换完全在你的浏览器中完成。文本框内容不会被传输、记录或在任何地方存储。这一点很重要,因为导出的记录通常包含 PII(客户数据、员工信息、交易历史)你不希望它们在别人的基础设施里流动。
我能得到 Tab 分隔(TSV)的输出吗?
能,在定界符下拉里选「Tab」。当你的数据含有逗号(地址、自由文本字段、带千分位的财务数据)且不希望每隔一格就要加引号时,TSV 是合适的选择。许多生物信息学与科学数据格式默认使用 TSV。
尺寸限制是多少?
看你的浏览器能装多少。因为没有服务器参与,所以没有服务端限制。在现代设备上,几十兆的 JSON 一两秒就转完;几百兆的载荷开始变慢。对非常大的数据集,请分批,或换到命令行的流式转换器。