CSV 与 JSON 转换工具
CSV → JSON:自动探测分隔符(逗号 / 分号 / 制表符 / 竖线),选择首行是否为表头,输出对象数组或数组的数组;JSON → CSV:支持对象数组与数组的数组,表头取所有键的并集,含分隔符或换行的字段自动加引号。
CSV 与 JSON 是数据交换里最常见的两种格式:CSV 适合表格与批量导入(Excel、WPS 与多数数据库导入工具都认),JSON 适合接口与配置文件。这个工具做双向转换 —— 把导出的报表转成接口能用的结构,或把接口返回的数组转成可直接打开的表格。
转换时最容易出问题的是分隔符与引号:字段内容里的逗号、换行、引号必须按 RFC 4180 用双引号包裹、内部引号写成两个,否则一行会被拆成多列。中文乱码通常不是文件本身的问题,而是 Excel 打开时按本地编码解析 UTF-8 文件所致,导入时显式选择 UTF-8 即可。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- CSV → JSON:粘贴 CSV 内容,确认分隔符(可自动探测)与首行是否为表头。
- 选择输出为对象数组(每行一个对象)或数组的数组,再复制结果。
- JSON → CSV:粘贴对象数组,表头取所有键的并集,缺失字段留空。
- 含逗号或换行的字段会自动加引号;粘进 Excel 前先确认编码是 UTF-8。
计算原理与示例
CSV 解析的难点
CSV 看起来像「用逗号切开每一行」,但真实文件里逗号可能出现在字段内容中(如 `"北京, 朝阳"`),也可能有字段内换行。因此解析器必须是状态机:遇到引号进入「引号内」状态,此时逗号与换行都不算分隔;引号内的 `""` 表示一个真正的引号字符;只有状态外的逗号才切分字段。
分隔符自动探测
自动探测的做法是:取前几行,统计每种候选分隔符(逗号、分号、制表符、竖线)在「引号外」的出现次数;优先选择各行次数一致且最多的那个。如果所有候选都没出现(单列数据),回退到逗号。也可以手动指定分隔符,此时完全按指定值解析。
JSON 转 CSV 的表头规则
JSON 转 CSV 时,表头取所有对象键的并集,并按首次出现的顺序排列;某个对象缺少的键在对应位置留空。如果 JSON 是「数组的数组」(没有键),则原样输出、不加表头。字段值中含分隔符、引号或换行时自动用引号包裹并把 `"` 双写,因此转换结果可以被 Excel 直接打开。
代码示例
Python 用标准库读写 CSV
import csv, json
# CSV → JSON(自动处理引号与字段内换行)
with open("in.csv", newline="", encoding="utf-8-sig") as f:
rows = list(csv.DictReader(f))
with open("out.json", "w", encoding="utf-8") as f:
json.dump(rows, f, ensure_ascii=False, indent=2)
# JSON → CSV
with open("out.csv", "w", newline="", encoding="utf-8-sig") as f:
w = csv.DictWriter(f, fieldnames=rows[0].keys())
w.writeheader()
w.writerows(rows)
Shell 命令行转换与字段核对
# 第一个对象的字段名(确认表头)
jq -r ".[0] | keys[]" out.json
# 只导出需要的列,转成标准 CSV
jq -r ".[] | [.id, .name] | @csv" out.json > slim.csv
# 转成制表符分隔(粘进 Excel 不易串列)
jq -r ".[] | [.id, .name] | @tsv" out.json > out.tsv
常见问题
CSV 的分隔符是怎么自动探测的?
取前 5 行,在「引号外」统计逗号、分号、制表符、竖线各自出现几次,优先选「每行次数一致且次数最多」的那个。这样即使内容里含逗号(被引号包裹)也不会误判。单列数据无分隔符时回退逗号。
首行是表头还是数据,该怎么选?
选「是」时首行作为键,输出对象数组 `[{"name":"张三"}]`;选「否」时首行也是数据,输出数组的数组 `[["张三"]]`。如果不确定,看第一行是「字段名」还是「一条真实记录」即可。
引号里的逗号和换行会被正确处理吗?
会。字段被双引号包裹时,其中的逗号与换行都当作普通字符,不会被当成分隔符或换行。引号内的两个连续引号 `""` 表示一个字面引号,例如 `"他说""你好"""` 解析为 `他说"你好"`。
JSON 转 CSV 时表头从哪来?
取所有对象键的并集,按首次出现的顺序排列。例如 `[{"a":1},{"b":2}]` 会得到表头 `a,b`,第一行 `1,`、第二行 `,2` 空缺位置留空。数组的数组(`[[1,2]]`)没有键,直接原样输出而不加表头。
数字会变成字符串吗?
CSV 本身没有类型,所以 CSV → JSON 时数值一律先按字符串输出(`"28"` 而不是 `28`)。如果后续需要数字类型,请在导入数据库或代码侧做一次类型转换——这是 CSV 格式的固有限制,不是转换错误。
支持多大的文件?
上限约 5000 行、200 列,超出会提示。这个限制是为了保证浏览器里瞬时完成:转换在本地同步执行,太大就会卡住界面。超大表建议用命令行工具(如 csvkit)分批处理。
中文和特殊字符会乱码吗?
不会。转换全程按 UTF-8 字符串处理,中文、emoji 都不会被破坏;输出含中文的 CSV 时,Excel 在部分旧版本下需要选择 UTF-8 编码打开才能正确显示,这属于 Excel 的导入设置而非文件问题。
数据会被上传到服务器吗?
不会。解析与转换全部在浏览器内完成,没有任何网络请求,服务端收不到你的表格内容;本工具也不写计算历史,关闭页面即清除。含业务数据的表格可以放心使用。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。