文件只在浏览器内读取。Excel 工作表会转为 CSV 文本供检查;单元格原始值按文本保留,日期可能显示为序列号。
CSV 转 JSON 数组
把 CSV 解析成对象数组,可选首行表头
CSV 转 JSON:首行表头、类型转换与常见的格式错乱
首行是表头还是数据
CSV 格式没有规定首行必须是表头,这只是绝大多数场景下的约定。所以工具把这件事交给你决定:
| 选择 | 首行处理 | 结果 |
|---|---|---|
| 作为表头 | 取作键名,不产生数据 | [{"name":"Bob","age":"18"}] |
| 作为数据 | 生成默认键名(如 col1、col2) | 首行也成为一条记录 |
选错的症状很典型:明明有 100 行数据、转出来 99 条,或者第一条记录的字段值是 name、age 这种"列名"——说明表头被当成数据了。
值都是字符串——这是必须记住的一点
CSV 没有类型系统,每个单元格都是文本。转换后 "18" 是字符串而不是数字,"true" 是字符串而不是布尔。工具默认不做类型推断,原因是一个常见的反例:
邮政编码 01234、手机号、身份证号、以 0 开头的编号。自动转成数字会丢掉前导零,把 01234 变成 1234——这个错误是不可逆的,而它在业务上非常严重。
所以正确的做法是:解析成字符串,然后在你知道字段语义的地方显式转换。要数字就 Number(v),要布尔就按约定的真值集合判断(true/1/yes 都可能出现)。把类型判断交给 schema 定义,而不是交给通用的文本解析器。
常见的 CSV 格式问题
| 症状 | 原因 | 处理 |
|---|---|---|
| 列数不对、后半行错位 | 字段内有分隔符却没加引号 | 源文件的问题,需修正导出方式 |
| 某字段多出一段内容 | 字段内换行未按 RFC 4180 加引号 | 同上;工具按标准解析,此时会把一行读成两行 |
| 第一列列名带奇怪前缀 | 文件有 UTF-8 BOM | 工具会自动跳过 BOM |
| 中文乱码 | 文件实际是 GBK 等非 UTF-8 编码 | 先用编辑器转换为 UTF-8 再解析 |
| 最后一行多出一条空记录 | 文件末尾有空行 | 工具会忽略末尾的空行 |
分隔符要先确认
从 Excel 另存为 CSV 时,分隔符取决于系统的区域设置——欧洲地区常见分号,部分地区用 Tab。拿到的文件如果整行挤在一个字段里,几乎是分隔符没选对。工具提供逗号、分号、Tab、竖线四种,切换后重新转换即可。
还有一种情况是字段内容本身就含分号(例如地址、公式片段)。这时选择的分隔符要与文件实际使用的一致,工具严格按照该分隔符切分和识别引号。
工具怎么用
- 把 CSV 内容粘进左侧输入框。
- 选分隔符(拿不准就先试逗号,看结果的字段数是否合理)。
- 选首行是否作为表头。
- 点转换,得到对象数组的 JSON。
解析全程在浏览器本地完成。数据量很大时(几万行以上)建议改用命令行工具,浏览器里的字符串处理会明显变慢。
常见问题
单元格里的逗号被拆成两列了?
标准 CSV 里含分隔符的内容必须用双引号包住。如果来源没加引号,可先换成不会冲突的分隔符(如 Tab 或竖线)再转。
数字会变成字符串吗?
默认全部按字符串保留,避免把前导零、电话号等误转成数字。需要数值可自行在代码里转换。