CSV 与 JSON:承载同一份数据的两种方式
大多数表格数据最终都会以这两种格式之一存在。CSV 是电子表格的母语:一个纯文本文件,每一行代表一条记录,用逗号分隔各列。JSON 则是 API 和应用程序的语言:一种由对象(键值对)和数组(有序列表)构成的结构化文本格式。它们以截然不同的形态描述着相同的信息,这也正是格式之间相互转换如此常见的原因。本页面可以双向完成这种转换,且完全在你的浏览器内运行。
凡是用网格呈现更自然的场景,CSV 都能大显身手。从数据库导出报表、下载订单列表,或者从 Excel 或 Google 表格保存工作表,得到的几乎总是 CSV。它体积紧凑、人类可读,而且世界上每一款分析工具都能打开它。凡是软件与软件对话的场景,JSON 都游刃有余。REST API 收发的是它,配置文件用的是它,JavaScript 无需任何解析库即可读取它。当你需要把电子表格导出的内容喂给 API,或者把 API 的响应导入电子表格时,你其实就是在这两个世界之间做翻译。

行和表头如何变成对象
这种映射比看上去简单得多。CSV 文件的第一行通常是表头行,那些表头名称会成为 JSON 中的键。随后的每一行都变成一个对象,其中每个单元格都与对应的表头配成一对。整个文件则变成由这些对象组成的数组。因此,一个含有 name,email,age 这几列的 CSV 会变成类似 [{"name": "Ada", "email": "ada@example.com", "age": "36"}, ...] 的列表。反方向来看,JSON 转 CSV 时会读取第一个对象的键来构建表头行,然后为每个对象写出一行。只要你的数据真正是表格化的,这就是一次干净、可预期的往返转换。
值得了解的陷阱
CSV 看似简单,却藏着几处锋利的边角。最大的问题是字段内部含有逗号。如果某个地址里写着"Berlin, Germany",那么简单粗暴地按逗号拆分就会把这个单一值撕成两列。CSV 标准的处理方式是用双引号把这类字段包起来,而被引号包裹的字段内部的引号则需要写成双份("")。一款好的转换工具会遵守这些规则,让你的数据不会悄无声息地错位。还要留意分隔符:许多欧洲地区的导出文件用分号而非逗号,因为那里逗号本身就是小数分隔符。制表符和竖线也时常出现。
更深层的差异在于类型。CSV 根本没有数据类型的概念。一切都是文本,所以数字 42、布尔值 true 和一个空单元格看起来都只是普通的字符串。相比之下,JSON 会区分数字、字符串、布尔值、null 以及嵌套结构。当你把 CSV 转成 JSON 时,除非你告诉工具去识别数字和布尔值,否则这些值都会以字符串的形式出现。JSON 转 CSV 则有着相反的难题:嵌套的对象和数组无法整齐地放进扁平的网格里,所以它们通常会被展平或被序列化成单个单元格里的字符串。事先了解这一点,能让你免于日后纠结某一列"看起来不对劲"的原因。

一次真实的往返转换
这是一个经常出现的场景。一位同事给你发来一张新用户的电子表格,请你通过一个内部 API 把他们导入系统。可这个 API 只接受 JSON。你把表格导出为 CSV,粘贴到这里,就得到了一个干净的对象数组,可以直接放进你的请求体里。后来,API 返回了一个它所创建记录的 JSON 列表,而你需要把它交还给同一位同事审阅。你粘贴 JSON,把它转成 CSV,于是它就能直接在对方的电子表格里打开。无需脚本,无需安装,在正常工作流程的中途只需两次快速翻译。
本地运行,从设计之初便是如此
这一切都在你的浏览器中运行。你的 CSV 和 JSON 由你自己机器上的 JavaScript 解析和转换,没有任何内容会上传到服务器。这一点很重要,因为导出文件中往往包含真实的姓名、邮箱、订单详情或内部标识符,这些都不该被你粘贴进某个随机的远程服务里。在这里,数据永远不会离开页面。如果你想事后整理一下结果,我们的 JSON 格式化工具 可以对其进行美化和校验,你也可以浏览我们其余的 数据转换工具 来处理相关格式。
常见问题
我的数据会被上传到任何地方吗?
不会。转换完全在你的浏览器中使用 JavaScript 进行,因此你的 CSV 和 JSON 始终留在你自己的设备上,永远不会被发送到服务器。
转换工具能处理字段内部的逗号吗?
能。含有逗号的字段在 CSV 中应当用双引号包起来,解析器会尊重这些引号,从而让该值保持在同一列内。
为什么我的数字在 JSON 中显示成了文本?
CSV 没有数据类型,所以每个单元格都是纯文本。除非应用了数字和布尔值解析,否则这些值都会变成 JSON 字符串,因为源文件无法区分一个数字和一个单词。
转换成 CSV 时,嵌套的 JSON 会怎样?
扁平的网格无法容纳嵌套结构,所以嵌套的对象和数组通常会被展平,或被写成单个单元格内一个序列化后的字符串值。
我能用分号或制表符代替逗号吗?
可以。许多导出文件,尤其是欧洲的,会用分号或制表符作为分隔符,本工具可以读取这些分隔符,而不必使用标准的逗号。
它支持双向转换吗?
支持。你可以把 CSV 转成 JSON,也可以把 JSON 转回 CSV,这让电子表格和 API 之间的往返转换变得轻而易举。
