fixmint
ZH

CSV 与 JSON 互转:如何不破坏数据

作者: · · 更新于 2026年11月8日 · 阅读约 5 分钟

CSV 是一种纯文本表格:每行一条记录,字段之间用分隔符隔开,通常是逗号。当字段里含有分隔符、双引号或换行符时,它就容易出错,因为读取程序必须分清结构和内容。请遵守引号规则,检查分隔符和表头行,并把带前导零的数字保留为文本。本文其余部分说明一次转换往返能保留什么、不能保留什么。

CSV与JSON互转需要把CSV转成JSON,或反过来免费使用

CSV 文件到底是什么

CSV 没有唯一的权威标准,但 RFC 4180 描述了常见的格式,大多数读取程序都遵循它。其核心规则可以概括为以下几点:

  • 每条记录单独占一行,RFC 规定行尾为回车加换行,即 CRLF。
  • 字段之间用逗号分隔。
  • 含有逗号、双引号或换行符的字段要用双引号括起来。
  • 带引号的字段内部,双引号写成两个双引号。

所以这一行 1001,"Smith, Ann",02134 有三个字段,因为引号内的逗号属于内容。如果按每个逗号切分,就会得到四个字段。fixmint 的读取器会应用这些规则:带引号的字段可以包含分隔符、换行和双引号,未闭合的引号会报告它开始的那一行。

为什么分隔符会变

逗号是 RFC 的默认分隔符,但在逗号作小数点的地区,1,5 表示一点五,因此电子表格常把 CSV 保存为分号分隔。制表符分隔的文件(TSV)在大多数数据中不会引起冲突,因为制表符很少出现在文本内部。

“分隔符”菜单提供自动、逗号、分号、制表符和竖线几个选项。自动模式会读取前十行,统计引号之外每个候选字符的数量,并选择每行数量最一致的那个。如果自动判断错误,请自己选择分隔符。

在 fixmint 中转换

示例使用 CSV与JSON互转工具 的默认选项。

示例

粘贴以下 CSV,并勾选“第一行是表头”:

id,name,zip,note
1001,"Smith, Ann",02134,"She said ""hi"""
1002,Bo,10001,"line one
line two"

保持“转换数字”关闭、“JSON 缩进”设为 2 个空格时,工具返回:

[
  {
    "id": "1001",
    "name": "Smith, Ann",
    "zip": "02134",
    "note": "She said \"hi\""
  },
  {
    "id": "1002",
    "name": "Bo",
    "zip": "10001",
    "note": "line one\nline two"
  }
]

开启“转换数字”后,id 和 10001 会变成数字,02134 仍保持为文本。

操作步骤

  1. 粘贴 CSV,或拖入 .csv、.tsv、.txt 或 .json 文件。
  2. 检查“第一行是表头”、“分隔符”和“转换数字”。选择 JSON 缩进:2 个空格、制表符或压缩。
  3. 复制结果,或将其下载为 .json 文件。

把数字保留为文本

JSON 数字不能有前导零,所以 02134 不是合法的 JSON 数字。邮政编码、电话号码和产品编码必须保持为文本,否则前面的零会消失。开启“转换数字”后,工具会把 10001 转为数字,但把 02134 保留为字符串。该选项默认关闭。它只转换以点作为小数点的值,因此分号文件中的 1,5 保持原样。

长编号同样需要注意。运行浏览器中大多数 JSON 的 JavaScript 会把数字存为 64 位浮点数。整数只有在不超过 9,007,199,254,740,991(即 2 的 53 次方减 1)时才能精确表示。数字 12345678901234567890 被 JavaScript 程序读取后会变成 12345678901234567000。工具会按输入原样写出这些数字,但在 JavaScript 中解析该 JSON 的程序会对它们进行舍入。请把编号保存为字符串。JSON 格式化工具 同样会按输入原样保留这类数字,并告诉你保留了多少个。

嵌套 JSON 与转回 CSV

CSV 是扁平的,而 JSON 可以嵌套。将 JSON 转为 CSV 时,会为所有对象中出现的每个键生成一列,列的顺序是各键首次出现的顺序。嵌套的对象或列表会以 JSON 文本的形式写入单元格,null 变为空单元格,true 和 false 则写成文字。行之间用 CRLF 连接,只有当字段包含分隔符、双引号、换行,或两端有空格时,才会给字段加引号。

以 [ 或 { 开头的输入会被当作 JSON 读取。切换按钮可以改变转换方向,标签显示为 CSV → JSON 或 JSON → CSV。在 JSON → CSV 方向下,输出选项会显示“分隔符”菜单和“面向 Excel”选项。

一次往返转换会丢失部分信息。null 和空字符串都会变成空单元格,嵌套结构也无法还原,所以如果需要保留结构,请保存原始 JSON。

Excel、UTF-8 与字节顺序标记

CSV 文件本质上是字节,读取程序必须知道编码。UTF-8 可以表示带重音符号的字母和其他文字。字节顺序标记(BOM)是文件开头的三个字节,用来标明该文件为 UTF-8。没有它的话,某些电子表格程序会用本地代码页读取文件,带重音的字母就会变成乱码。打开 CSV 时,电子表格还常把 02134 变成 2134。

“面向 Excel”选项只会在 JSON → CSV 方向下,为下载的 CSV 文件添加字节顺序标记,复制的文本不会添加。读取器会移除输入中的字节顺序标记,因此已经带有 BOM 的文件也能正常转换,不会报错。

特殊情况

  • 行的长度不一致。 开启表头时,较短的行会用空值补齐,较长的行会把多出的值保留为 column_N。结果会报告有多少行与表头不一致。
  • 重复或空白的表头。 重复的名称会加上 _2、_3 等后缀,空名称会变为 column_N。这些处理都是为了避免两个键互相覆盖。
  • 弯引号。 文字处理软件中的智能引号不是 CSV 引号,因此像 “Smith, Ann” 这样的字段会在逗号处被切开。请先用修复粘贴的文本把它们替换为直引号,或按弯引号指南中的方法处理。
  • 引号内的换行。 跨两行的字段是一条记录,但删除重复行会在每个换行处切分输入,因此会把两半当成两行。请转换为 JSON 后比较对象,或手动检查。该工具对每行一个值的列表仍然有用。
  • 大文件。 结果框只显示前 100,000 个字符,但复制和下载包含完整输出。
  • 无效的 JSON。 转换器会报告错误所在的行和列,并在对应字符下方用插入符(^)标出。JSON 格式化工具会解释常见的错误,JSON 错误指南则有更详细的说明。

字段周围多余的空格、文件中间的空行,以及引号使用不一致,在分隔符问题出现之前就会造成大多数 CSV 问题。请先清理 CSV,再进行转换。

由 AI 辅助翻译自英文原文。

评论

    还没有评论。快来抢沙发。

    你的评分(可选)

    你的邮箱不会被显示或保存。

    How to Remain Valuable When Intelligence Becomes Cheap 的封面How to Remain Valuable When Intelligence Becomes Cheap

    224页,探讨当AI能完成大部分认知工作时,哪些人类、经济和战略上的优势依然稀缺。

    $3.84在 Gumroad 获取英文阅读