如何把 CSV 转成 JSON(以及转回去)
2026-06-12
一句话答案: 把你的 CSV 粘贴或拖进 CSV ↔ JSON 转换器,就能得到一个对象数组,每行一个对象,以表头行作为键——然后下载结果。它也能反过来,从 JSON 转回 CSV。一切都在你的浏览器里运行,而这一点在这里比平常更要紧:电子表格正是客户邮箱、订单记录和其他 PII 待的地方,你真的不想把这些粘进某个可能会记录数据的、随便找来的服务端转换器。
把 CSV 转成 JSON
- 打开 CSV ↔ JSON 转换器。
- 粘贴你的 CSV,或者把
.csv文件拖到输入框上。 - 第一行被当作表头——每个列名都成为一个 JSON 键。
- 得到一个像
[{"name": "Ada", "age": "36"}, ...]这样的数组。分隔符(逗号、分号、制表符或竖线)会自动识别。 - 复制或下载这份 JSON。
一个像这样的 CSV:
name,age,active
Ada,36,true
会变成 [{"name":"Ada","age":"36","active":"true"}]——每个值都按原样保留为文本。勾选 数字和 true/false 输出为 JSON 值,得到的就是 [{"name":"Ada","age":36,"active":true}]。从 JSON 转回 CSV 也是同样的道理——所有对象键的并集成为表头行。
值得知道的那些坑
CSV 看着简单,其实不然。当心这几点:
- 带逗号的引号字段。 像
"Smith, Ada"这样的值是一个字段,不是两个。一个合格的解析器会尊重引号;一个天真的split(',')会把它搞乱。这个工具能正确处理引号;手搓的正则通常不行。 - 分隔符。 大量「CSV」文件其实是用分号或制表符分隔的(在以逗号作小数点的欧洲地区很常见)。转换器的“自动”会根据前几行识别逗号、分号、制表符和竖线(直接从 Excel 或 Google 表格复制出来的是制表符分隔);如果列还是错位,就自己选分隔符。
- 表头行。 第一行总会成为键,所以没有表头的文件会把第一条记录当成列名。确保第一行是真正的表头。(空的表头单元格会变成
column_N,重复的列名会加编号——name、name_2——而不是一列悄悄覆盖另一列。) - 类型转换。
007是数字还是字符串?true是布尔值还是文本?CSV 没有类型——在有东西去猜之前,一切都是字符串。如果你有邮编、电话号码或前导零,你通常会希望它们保留为字符串。要刻意做决定,而不是任由转换器悄悄把007变成7。
实话实说的替代方案
浏览器工具是最快的隐私路径,但它不是唯一的:
- CLI:
csvkit给你csvjson data.csv。或者用jq做 JSON→CSV:jq -r '(.[0]|keys_unsorted) as $k | $k, (.[]|[.[$k[]]]) | @csv'——很强大但有点磨人。 - Python: 用标准库几行就行——
csv.DictReader读,json.dump写。对类型有完全的控制,做可重复运行的脚本很合适。 - Excel / Sheets: 能存成 CSV,但 不能 存成 JSON。别指望电子表格能吐 JSON。
当它是某条你要反复运行的流水线的一环时,选 CLI 或 Python;当它是一次性的、你现在就要干净的 JSON、且数据不该离开你的机器时,选浏览器工具。
拿到 JSON 之后,用 JSON 格式化工具 把它整理好;或者如果你要写成配置文件,用 YAML ↔ JSON 工具 转一下。
常见问题
怎么在不上传文件的情况下把 CSV 转成 JSON? 用一个在浏览器里运行的转换器,比如 CSV ↔ JSON 工具。转换时打开 DevTools → Network;你会看到零请求,这就证明了数据留在本地。
为什么我的数字在 JSON 里显示成了字符串?
CSV 没有类型信息,所以转换器只能猜。这个工具默认把所有东西保留为字符串,邮编之类的就不会被搞坏。勾选 数字和 true/false 输出为 JSON 值 就能得到真正的数字和布尔值——007、+1、1,234 和超过 15 位的数字仍保留为字符串,因为把它们变成数字会改变它们。
怎么处理 CSV 字段内部的逗号?
把这个值用双引号包起来:"Smith, Ada"。一个符合标准的解析器会把引号内的文本当成单个字段。别手动按逗号切分。
能把 JSON 转回 CSV 吗? 能。CSV ↔ JSON 工具 双向都行。你的对象的键成为表头行,每个对象成为一行。
— Milo 🐨