数据

CSV 与 JSON:如何选择,以及转换时要注意什么

把电子表格导出的数据发给 API,或在 Excel 中打开 API 响应,都需要在 CSV 和 JSON 之间转换。了解两种格式的差异,可以避免数据在转换中受损。

表格与树

CSV(逗号分隔值)是一张表。第一行是列名,之后每一行是一条记录,值之间用逗号分隔。它是存储扁平数据(每行列都相同)最简单、最轻量的方式。

JSON 是一棵树。对象中可以包含数组,数组中又可以包含对象,因此“一个订单包含多个商品”这类层级数据可以自然地表达。代价是体积更大,因为每条记录都会重复键名。

name,city,score
Kim,Seoul,92
Lee,Busan,85

[
  {"name": "Kim", "city": "Seoul", "score": 92},
  {"name": "Lee", "city": "Busan", "score": 85}
]

该用哪一种

CSV 没有类型这一点很关键。把邮政编码 010010 存进 CSV,Excel 可能把它当作数字读入并去掉开头的 0;较长的银行卡号或订单号可能变成 1.23E+15 这样的科学计数法。

  • 需要在 Excel 或 Google 表格中打开或编辑的数据:CSV。
  • 几十万行的简单日志或统计数据:CSV(体积小,便于逐行流式处理)。
  • Web API 的请求和响应:JSON。
  • 记录中包含列表的层级数据:JSON。
  • 需要区分数字、布尔值和 null 时:JSON(在 CSV 中一切都是文本)。

逗号与引号:CSV 的转义规则

如果值里含有逗号怎么办?RFC 4180 规定用双引号把它括起来,例如 "Beijing, China"。值中的双引号通过连写两个来转义,所以 He said "hi" 会变成 "He said ""hi"""。用引号括起来时,值中也可以包含换行。

只调用 split(',') 的代码会忽略这些规则,一旦出现地址或备注列,各列就会错位。处理 CSV 时请始终使用遵循标准的解析器或转换工具。

为什么 Excel 打开会出现乱码

在 Windows 版 Excel 中双击 UTF-8 编码的 CSV,中文、日文或带重音的字符常常显示为乱码。这是因为没有 UTF-8 字节顺序标记(BOM)时,Excel 会靠猜测,退回使用系统的旧编码(如 GBK)。

可以把文件保存为带 BOM 的 UTF-8,或在 Excel 中使用“数据 → 从文本/CSV”并明确选择 UTF-8。反过来,程序读取带 BOM 的文件时,要检查第一个列名前面是否多了一个不可见字符。

把嵌套 JSON 展平为 CSV

把树变成表需要约定规则。常见做法是用点号连接路径,于是 {"user": {"name": "Kim"}} 变成 user.name 这一列。

数组更麻烦。如果一个订单有三个商品,可以拆成三行,也可以把商品以 JSON 字符串的形式存在一列里。拆成多行适合分析;JSON 字符串列适合保留原始数据。

转换前的检查清单

用 AIBIZAP 的 CSV ↔ JSON 转换工具转换,再用 JSON 格式化工具检查结构,就能及早发现错误。

  • 确认第一行是表头,分隔符确实是逗号(分号和制表符也很常见)。
  • 开头的 0 有意义的编码值要保持为字符串。
  • 先去掉单元格前后的空格和空行;空白清除工具能帮上忙。
  • 检查转换后的行数是否与原始数据一致。不一致通常是引号或换行的问题。

用这些工具试一试

更多指南

全部指南