CSV 转 JSON 的核心难点不在转换本身,而在字段映射、类型推断和特殊字符处理。只要先把这三件事确定下来,再用脚本或专业工具执行,批量转换可以在几分钟内完成,不需要依赖在线工具。
CSV 与 JSON 的本质差异
CSV 是一种扁平的行列结构,用分隔符(通常是逗号)隔开字段,每行一条记录。JSON 是嵌套的键值对结构,支持对象、数组、字符串、数字、布尔值和 null。
两者最关键的差异在于:
- CSV 的所有值都是文本,没有类型概念;JSON 区分字符串、数字、布尔值和 null。
- CSV 靠位置对应列,JSON 靠键名对应值。
- CSV 不支持嵌套,JSON 可以多层嵌套。
因此转换过程实际上包含两个动作:结构映射(列名转键名)和类型转换(文本转数字、布尔值等)。
转换前必须确认的 CSV 细节
拿到一个 CSV 文件,不要急着丢进工具。先确认以下内容,否则转换结果很可能不可用。
分隔符
CSV 并不一定用逗号。常见的有逗号、分号、Tab(制表符)。如果分隔符判断错误,整行会被当成一个字段。
判断方法:打开文件看第一行,数一数哪个符号出现的次数与预期列数一致。
引号规则
字段中如果本身包含分隔符、引号或换行符,通常会用双引号把整个字段包起来。字段内部的双引号则通过重复一次来转义(即 "" 表示一个 ")。
如果解析器没有正确处理引号,带逗号的地址、带换行的备注就会把一条记录拆成多条。
表头
有的 CSV 第一行是列名,有的没有。没有表头时,你需要自己定义键名,否则 JSON 里只能生成 field1、field2 这样的占位键。
编码与 BOM
UTF-8 文件有时会带 BOM(字节顺序标记),表现为文件开头多出几个不可见字节。很多解析器会把 BOM 当成第一个字段名的一部分,导致第一个键名异常。处理方式是读取时显式指定编码,或先去除 BOM。
字段映射的操作步骤
字段映射就是把 CSV 的列对应到 JSON 的键。按以下步骤进行:
- 读取 CSV 第一行,列出所有列名。
- 为每一列确定目标 JSON 键名。列名含空格、中文或特殊符号时,建议改成规范的英文键名。
- 确定每一列的目标类型:字符串、整数、浮点数、布尔值还是 null。
- 对布尔值列,明确哪些文本表示真、哪些表示假(如
true/false、1/0、yes/no)。 - 对日期时间列,确定统一的目标格式,避免同一字段出现多种写法。
- 对可能为空的列,决定空字符串是转成空字符串、null 还是直接省略该键。
- 写一份映射配置,把「源列名 → 目标键名 → 目标类型」固定下来,后续每次转换复用。
映射配置一旦确定,就不要每次手工调整,否则同一批数据两次转换结果会不一致。
类型处理的要点
类型处理是转换中最容易出错的部分。
- 数字:CSV 里的数字是文本。转 JSON 数字时要确认没有千分位分隔符、货币符号或单位。带前导零的编号(如订单号、电话号码)应当保留为字符串,否则前导零会丢失。
- 布尔值:JSON 的布尔值只有
true和false,不接受True、1、是。需要在映射阶段统一转换。 - null:CSV 里没有 null 的概念,空单元格需要明确映射为
null还是空字符串。 - 日期时间:JSON 没有日期类型,日期通常存为字符串。要统一格式,避免混用多种写法。
- 嵌套结构:如果目标 JSON 需要嵌套,需要在映射配置里额外定义层级关系,CSV 本身不提供这个信息。
大数据量与复杂格式的处理方式
在线转换工具通常有文件大小限制,且不适合处理含大量特殊字符的数据。数据量大或格式复杂时,建议:
- 使用命令行工具或脚本语言处理,可控制编码、分隔符、引号规则和类型映射。
- 使用支持大文件和可视化字段配置的桌面软件,配置一次后可重复使用。
- 分块读取和写入,避免一次性把整个文件加载进内存。
常见错误
- 分隔符判断错误,导致整行变成一个字段。
- 未处理字段内的引号和换行,记录被错误拆分。
- 未处理 BOM,第一个键名异常。
- 数字字段丢失前导零。
- 布尔值或空值映射不统一,同一字段出现多种表示。
- 生成的 JSON 存在多余逗号或缺失括号,导致整体无法解析。
- 转换前未备份原始 CSV,出错后无法回溯。
常见问题
CSV 里的逗号在字段内部怎么办?
该字段应当用双引号包起来。解析器识别引号后,会把引号内的逗号当作普通字符,而不是分隔符。
为什么转换后数字变成了字符串?
因为 CSV 里所有值都是文本,转换工具默认按字符串输出。需要在映射配置里显式指定该列为数字类型。
为什么第一个键名看起来不对?
很可能是文件带 BOM。读取时指定 UTF-8 编码或先去除 BOM 即可。
空单元格应该转成什么?
取决于下游用途。需要区分「没有值」和「值为空字符串」时转成 null,否则转成空字符串。关键是整批数据保持一致。
数据量很大,能用在线工具吗?
不建议。在线工具通常有大小限制,且难以控制编码和类型映射。大数据量应使用脚本或桌面工具本地处理。