CSV 转 JSON 实战指南:表头作 key、转义与中文编码
讲清 CSV 转 JSON 的真实用途、表头作 key 的规则、分隔符与引号转义、字符串与数字的取舍,以及中文乱码怎么躲,附一段真实输入输出例子。
CSV 转 JSON 实战指南:表头作 key、转义与中文编码
每个写过后台的人迟早会遇到这件事:运营丢来一个 Excel 导出,要求灌进数据库或者渲染到页面上。Excel 那头吐的是 CSV,代码这头吃的是 JSON。中间这一道转换看着简单,真动手才发现坑不少:逗号在字段里、引号要转义、数字被读成了字符串、中文一打开全是乱码。这篇把这几件事一次讲透。
为什么要把 CSV 转成 JSON
CSV 是行列结构,适合人看和 Excel 编辑;JSON 是对象结构,适合程序消费。两个最常见的落点:
一是导入接口。后端的批量导入接口几乎都接收 JSON 数组,一条记录一个对象。把 CSV 转成对象数组,直接 POST 上去就行,不用再写一段解析逻辑。
二是前端渲染。表格组件、图表库吃的都是 [{}, {}] 这种形状。CSV 转好之后,前端 map 一遍就能渲染,字段名直接对应表头,可读性比 row[3] 这种下标取值强太多。
表头作 key 这条规则
CSV 转 JSON 最核心的约定:第一行是表头,后面每一行变成一个对象,表头单元格变成对象的 key。
比如表头是 name,age,city,那么数据行 张三,28,北京 就会转成 {"name":"张三","age":"28","city":"北京"}。每行一个对象,整份文件就是一个对象数组。
要注意两件事。第一,如果你的数据压根没有表头(比如系统日志直接倒出来的),要把「首行为表头」关掉,否则真正的第一行数据会被当成 key 吃掉。关掉之后 key 会退化成 col_1、col_2,虽然丑但不丢数据。第二,表头里有重复列名是隐患,后一个会覆盖前一个,转之前最好先把表头去重。
分隔符与引号转义:RFC 4180 是底线
很多人图省事,自己按逗号 split。这对干净数据没问题,碰到字段里本身带逗号就崩。"Smith, John" 这一个字段会被切成两列,整行错位。
正确做法是遵循 RFC 4180 标准。它规定:含逗号、换行、引号的字段用双引号整个包起来;字段内部如果有字面双引号,写成两个连续双引号 "" 来转义。Excel 导出严格遵循这条,所以一个合规的解析器必须认得引号包裹和 "" 转义,而不是无脑切分。
分隔符也不只有逗号。欧洲版 Excel(德语、法语)默认用分号 ;,因为当地逗号被占去当小数点了,19,90 是一个数而不是两列。这种文件要把分隔符切到分号才解析得对。TSV 用 Tab,日志文件常用竖线 |,这些都是合法的分隔符,关键是选对。
字符串还是数字:类型的取舍
这是最容易被忽略的一点。CSV 本质上是纯文本,所有单元格都是字符串,它不携带类型信息。所以 age 列里的 28,转出来到底是 JSON 数字 28 还是字符串 "28",取决于转换工具的策略。
保守的工具会把所有值都当字符串输出,也就是 "age":"28"。这样最安全,绝不会把电话号码 007 转成数字 7 把前导零吃掉,也不会把邮编、订单号这类「长得像数字其实是标识符」的字段搞坏。代价是,后端如果要求 age 是数字类型,你得自己再 Number() 一道。
我自己踩过的亏是反过来:某次图省事用了会自动推断类型的转换器,结果一列商品编号 0512300 被识别成数字,前导零没了,跟下游系统对不上,排查了一下午才定位到是转换那一步丢的。从那以后我宁可全部当字符串出,要数字在业务层显式转,至少哪一步出问题看得见。
一段真实的输入输出
光说规则太干,看个例子。假设有这么一份 CSV,注意第二行的商品名里带了逗号和引号:
name,price,note
"机械键盘, 87 键",399,热销
"罗技 ""MX"" 鼠标",299,
正确转出来的 JSON 是这样:
[
{ "name": "机械键盘, 87 键", "price": "399", "note": "热销" },
{ "name": "罗技 \"MX\" 鼠标", "price": "299", "note": "" }
]
看三个点:第一行那个带逗号的商品名留成了完整一个字段,没被切开;第二行 ""MX"" 这个转义还原成了一对真正的引号 "MX";空的 note 留成了空字符串而不是消失。这就是 RFC 4180 解析和手动 split 的差距。
中文编码这道暗坑
中文用户绕不开编码。Excel 在 Windows 上「另存为 CSV」默认存的是 GBK,不是 UTF-8。这种文件直接拖进按 UTF-8 解析的工具里,中文全是乱码方块。
最稳的做法是在 Excel 里选「CSV UTF-8」那个导出选项,从源头就存成 UTF-8。如果手上已经是 GBK 文件,可以先用文本编辑器另存成 UTF-8 再转。在线工具基本都按 UTF-8 处理,所以把好编码这一关,中文就能原样进 JSON。转好的 JSON 是 UTF-8,中文字符直接可读,不需要再做 \uXXXX 那种 Unicode 转义。
动手转一份
理论说够了。把你的 CSV 粘进 CSV ⇄ JSON 互转工具,保持「首行为表头」开着,分隔符按文件实际情况选,几秒就能拿到对象数组。如果转出来的 JSON 想再格式化、校验或者折叠看结构,接着丢给 JSON 格式化工具 就行。要把 CSV 直接变成建表加插入语句,可以用 CSV 转 SQL。整条链路全程在浏览器本地跑,表格数据不上传服务器,客户记录和财务数据也不会落进浏览历史。
Made by Toolora · Updated 2026-06-13