Uvlio

Command Palette

Search for a command to run...

返回文章列表
技术文章

JSON 和 CSV 并不等价:转换时会丢失什么

JSON 和 CSV 常在 API 与电子表格之间相遇。很多人以为转换是机械的:对象变成行,键变成表头,值填进单元格。简单数据确实如此,但两种格式服务的结构不同。JSON 能表示嵌套对象和数组,CSV 表示文本字段构成的表格。每次转换都在做取舍。
limitcool 维护的 Uvlio 编辑团队2026-05-177 分钟阅读
主题封面开发工具JSONCSV

JSON 和 CSV 并不等价:转换时会丢失什么

解释 JSON 与 CSV 转换中的嵌套、表头、引号、null、类型和电子表格假设。

文章主题预览
{"name":"Ava","role":"admin"}
name,email,role
validate rows before import
关联工具
JSON ⇄ CSV 转换JSON 格式化
阅读重点
1理解原理
2检查边界
3使用工具

原创流程图

JSON 和 CSV 并不等价:转换时会丢失什么

这张图由 Uvlio 为本文工作流生成,用来说明从输入检查到输出判断的基本路径。
1

理解原理

检查后再进入下一步

2

检查边界

检查后再进入下一步

3

使用工具

检查后再进入下一步

维护与复核
维护者:limitcool。阅读时可重点关注技术原理、处理边界、隐私风险和可验证事实。
CSV 是文本字段表格

CSV 有行和列,每个单元格本质上是文本,即使表格软件后来把它显示成数字、日期或公式。分隔符、引号、换行和转义规则定义文本如何拆分。它适合联系人、交易、库存和报表行,不天然适合嵌套结构。

JSON 可以表达更深结构

JSON 对象能包含数组、对象、布尔值、null 和数字。一个订单可以包含客户、地址、商品、折扣和元数据。转成 CSV 时必须决定:一行一个子项、数组拼进单元格、拆成多张表,还是丢掉细节。

表头会变成契约

CSV 转 JSON 时,表头常变成对象键。大小写、空格、重复名都重要。JSON 转 CSV 时,键顺序会变成列顺序,缺失键会变成空单元格。导出前应确定稳定表头,并说明它是给人看还是给导入系统用。

null、空字符串和缺失字段不同

JSON 能区分 null、空字符串和缺失字段。CSV 往往都表现为空单元格,除非事先约定。对于更新导入,空单元格可能表示保持不变、清空值或未知。转换前必须定义空值语义。

电子表格会重新解释数据

用表格软件打开 CSV 时,长数字可能变科学计数法,前导零会消失,日期按本地规则解析,某些开头字符会被当成公式。转换器可能输出了正确文本,但表格显示改变了含义。ID、邮编、电话和金额要看原始 CSV。

引号和换行需要测试

真实样例应包含字段内逗号、引号、空值,以及目标系统允许时的单元格内换行。这些情况能暴露解析器和写入器是否遵守同一套转义规则。只有简单姓名和数字的演示样例不能证明转换可靠。

更安全的转换流程

先检查源结构。JSON 嵌套时,决定扁平化、拆表还是摘要;CSV 转 JSON 时,确认表头和空值规则。先转换小样例,再比较行数、键数、类型和边界值。生产导入还应在转换后做 schema 校验。

常见问题

所有 JSON 都能变成一个 CSV 吗?

不能。深层嵌套 JSON 往往需要扁平化规则、多张表或有意识地丢失细节。

为什么 ID 的前导零没了?

表格软件可能把它当数字显示。原始 CSV 文本里可能仍然保留前导零。

最安全的测试样例是什么?

包含逗号、引号、空值、非 ASCII 文本、嵌套字段和一个绝不能改变的值。

嵌套数组应该怎么放进 CSV?

没有通用答案。可以一行一个子项、拼进单元格、拆多个 CSV,或把嵌套字段保留为 JSON 文本。

为什么打开 CSV 后日期变了?

表格软件会按本地设置猜日期。导入前应优先使用明确格式,并检查原始文本。