CSV 转 JSON 指南:表头、分隔符、引号与数据类型处理
Excel 导出了一张“订单号、客户、金额”的表,接口却要求每行一个 JSON 对象;或者接口返回 JSON,你需要交给财务继续在表格里筛选。转换并不是按逗号切几刀这么简单:分隔符、表头、引号、换行和类型都会改变结果。本指南用 WebUtils CSV ⇄ JSON 转换器完成可复核的来回转换,并明确哪些信息无法从二维 CSV 无损恢复。
一句话理解两种格式
CSV 是按行和列排列的平面文本,JSON 是能表达对象、数组和嵌套关系的数据结构。
CSV 适合表格交换和人工查看,JSON 适合接口传输和程序消费。转换器可以把一行 CSV 映射为一个对象,但不会凭空知道“00123”是编号还是数字 123,也无法自动恢复一个单元格中原本被展平的嵌套对象。转换前先决定字段语义,转换后再做校验。
CSV 的隐藏规则
分隔符不总是逗号
本工具支持逗号 ,、分号 ;、制表符 Tab 和竖线 |。不同地区的 Excel 可能因为小数逗号设置而导出分号;复制网页表格常带 Tab。整份文件只能选一种主要分隔符,混用会造成列数漂移。
引号决定逗号是否属于内容
下面一行有三个字段,而不是四个:
id,name,note 1001,张三,"延迟 2 小时,已补发"
逗号出现在双引号内,属于 note 的内容。换行也可以出现在引号包裹的字段中。手工用 split(',') 解析往往会把它拆坏,本工具的逐行解析会处理常见的引号规则,但极端脏数据仍需专业 CSV 库复核。
表头是数据还是字段名
有表头时,第一行 id,name 变成对象键;没有表头时,转换器需要生成或使用默认列名。若误把第一条真实记录当表头,第一条数据就会丢失,且后面每个对象的键都会错位。
JSON 的结构代价
标准 JSON 的对象键必须用双引号,字符串也用双引号;数组用 [],对象用 {}。CSV 中所有单元格本质上都是文本,转为 JSON 时常见策略是:数字看起来像数字就转成数值,空字段变成空字符串或 null,布尔值是否转为 true/false 则取决于转换实现和约定。不要把转换器的推断当成业务类型定义。
二维 CSV 无法天然表示:
- 一个订单下有多个商品的数组;
- 客户地址中的国家、省、市层级;
- 同一字段既有数字又有带单位的文本;
- 原始列顺序之外的类型、约束、枚举和时区。
如果 JSON 里有嵌套对象,转回 CSV 时只能展平为列名(例如 address.city)或序列化成一个 JSON 字符串。回转后再转回 JSON,结构可能与原始对象不同。
WebUtils 操作流程
- 打开 CSV 与 JSON 转换器,先判断左侧输入框放 CSV 还是 JSON。
- 粘贴一小段真实结构的样例,不要一上来处理整份百万行数据。先验证列数、引号和编码。
- 在分隔符下拉框选择逗号、分号、Tab 或竖线。复制自 Excel 的内容通常先试 Tab;看预览列数是否符合预期。
- 根据第一行勾选或取消“包含表头”。有表头时,键名来自第一行;无表头时,确认页面生成的列名策略是否符合你的接口。
- 需要阅读 JSON 时勾选“美化 JSON”;机器传输可关闭美化以减少体积。美化只改变空白,不改变数据语义。
- 点击“CSV → JSON”,检查每个对象的键、值和行数;不要只看第一行。
- 用一条包含逗号、引号、空字段和前导零的记录做边界测试,再复制或下载结果。
- 反向转换时,把 JSON 放入 JSON 区,点击“JSON → CSV”,检查嵌套对象、数组和换行字段如何被展平。
- 将结果交给 JSON 格式化或校验工具进行语法检查,再进入接口联调。
页面在浏览器本地执行,适合中小型文本。大文件会受到浏览器内存和文本框渲染限制,超过限制应改用命令行、脚本或数据处理平台。
真实输入输出:保留前导零
输入 CSV:
sku,qty,price,note 00123,2,9.90,"促销,第二件半价" 00007,,12.5,""
有表头且选择逗号后,理想的 JSON 结构可能是:
[
{"sku":"00123","qty":2,"price":9.9,"note":"促销,第二件半价"},
{"sku":"00007","qty":"","price":12.5,"note":""}
]
这里 sku 应保持字符串,否则 00123 会变成 123,库存系统就无法按原编号匹配。金额 9.90 变成数值后显示为 9.9,若财务要求两位小数,应在业务层使用定点金额或字符串,而不是依赖 JSON 展示格式。
类型与空值:转换后必须人工确认
| CSV 内容 | 可能结果 | 风险 |
|---|---|---|
00123 |
字符串或数字 123 | 编号前导零丢失 |
2026-08-09 |
字符串 | 时区与日期类型仍需业务定义 |
1,234.50 |
被逗号拆列或保持文本 | 千分位格式不适合直接当 CSV 分隔符 |
| 空字段 | ""、null 或缺键 |
下游校验规则可能不同 |
TRUE |
字符串或布尔值 | 大小写和推断策略不一致 |
- |
字符串 | 不要自动当作零或空值 |
建议在数据字典中写明“列名、是否必填、字符串/数字/布尔、空值含义、示例”。转换器负责语法层,数据字典负责业务层。
错误表:为什么结果会错位
| 现象 | 原因 | 处理 |
|---|---|---|
| 所有内容挤在一列 | 分隔符选错 | 依次试 Tab、逗号、分号、竖线并观察列数 |
| 列数忽多忽少 | 未处理引号内逗号或换行 | 确保字段成对使用双引号,重新复制完整记录 |
| 第一条记录消失 | 错勾“包含表头” | 检查第一行到底是字段名还是数据 |
| 中文显示乱码 | 原 CSV 是 GBK 等编码 | 先在编辑器转成 UTF-8,再粘贴 |
00123 变成 123 |
自动类型推断 | 编号列按字符串保存,转换后抽查 |
| JSON 报语法错误 | 使用单引号、尾逗号或未闭合引号 | 用 JSON 校验器定位行号,修复后再转 |
嵌套字段变成 [object Object] |
CSV 无法直接表示对象 | 展平列名或先序列化为 JSON 字符串 |
| 数组只剩第一项 | 转换器按标量列处理 | 约定分隔符并在业务层反序列化,或使用专用脚本 |
| 金额小数位丢失 | 数值格式化去掉尾零 | 金额用定点整数分或字符串,并在接口层约束 |
| 大文件页面卡顿 | 文本框和浏览器内存限制 | 分片处理或改用命令行 CSV 库 |
发现行数不一致时,先统计原 CSV 的逻辑记录数,再统计 JSON 数组长度。含引号换行的记录不能简单按物理行数统计。
真实场景:从 Excel 到接口再回到报表
商品导入。 Excel 导出 Tab 分隔内容,SKU、条码和邮编必须保持字符串。先勾选表头、选 Tab,转换后抽查前导零,再用 JSON 校验器确认每个对象都有必需键。
日志分析。 日志字段中常含逗号和双引号,导出时选择逗号并正确转义。转换成 JSON 后按事件对象筛选,完成分析后只导出必要字段,避免把令牌和原始请求体带入报表。
接口回归测试。 用 CSV 保存几十组参数,再转换为 JSON 数组驱动测试。测试脚本要明确把 "001" 当字符串,把 1 当数字;不能依赖不同运行环境的自动推断。
财务对账。 JSON 的订单明细含数组,回导 CSV 时把商品数组展平为多行,并保留订单号。若强行一行一个订单,数组会被压成字符串,后续筛选和求和都不可靠。
供应商交换。 对方要求分号分隔且 UTF-8 BOM。转换器可验证字段结构,但文件编码、BOM 和换行风格要在最终导出脚本中明确处理。
安全与隐私边界
- 页面在浏览器中本地转换,不代表数据在电脑上没有痕迹;剪贴板、浏览器缓存、屏幕共享和下载目录仍可能泄露。
- 生产订单、客户手机号、访问令牌不应粘贴到公共演示或分享链接。先脱敏,完成后清空输入框。
- CSV 里以
=,+,-,@开头的单元格可能在电子表格中触发公式,导出给他人前要做 CSV 注入防护。 - 转换器不执行 JSON 中的脚本,但下游系统可能把字段当 HTML 或 SQL 使用,必须继续做输出编码和参数化查询。
- 大文件和高敏数据应在受控环境中用审计过的脚本处理,并保留输入哈希和输出版本。
常见问题
转换器会自动识别分隔符吗?
页面提供逗号、分号、Tab 和竖线选项,最稳妥的做法仍是根据来源选择并观察列数。自动猜测在混合内容或只有一列样本时容易误判。
为什么 CSV 转 JSON 后数字和字符串混在一起?
CSV 本身没有类型,转换器或实现会根据文本外观推断。业务上重要的编号、金额和日期必须在转换后按数据字典确认,必要时统一为字符串或定点数。
JSON 转 CSV 能完全还原原来的 CSV 吗?
不能保证。缩进、对象键顺序、嵌套数组、空值表达、换行风格和编码信息可能丢失。双向转换的目标是交换数据,不是恢复原文件的每个字节。
含逗号的字段一定要加双引号吗?
是。字段内容含分隔符、换行或双引号时,应使用双引号包裹,并把内部双引号写成两个双引号。否则任何兼容解析器都可能把一条记录拆成多列。
如何避免条码前导零消失?
把条码列当字符串处理,在 Excel 导出和 JSON 接口中都写明字符串类型。转换后抽查 00123、00007 等样本,不要只看数字列是否能求和。
可以在浏览器里转换几十 MB 的 CSV 吗?
小规模文本通常可以,但文本框渲染和内存会限制体验。超过页面承受范围时,分片或使用经过测试的 CSV 库更可靠,还能记录错误行和编码信息。
收尾清单
转换前写清分隔符、编码和表头;转换后核对行数、键名、前导零、空值和嵌套字段;上线前再做 JSON 语法校验与 CSV 注入检查。这样得到的不是“看起来像 JSON”的文本,而是下游可以解释的数据契约。