如何将 CSV 转换为 JSON

· 7 分钟阅读

CSV(逗号分隔值)是表格数据最简单的格式,每个电子表格都可以导出它。JSON(JavaScript对象表示法)是Web API和现代应用程序的标准格式。在它们之间转换是开发中最常见的数据任务之一。基于浏览器的转换器在本地处理整个工作,而无需将您的数据上传到服务器。

何时需要CSV转JSON

CSV如何变为JSON

一个CSV文件:

name,age,city
Alice,30,New York
Bob,25,London

变成一个JSON对象数组:

[
  {"name": "Alice", "age": "30", "city": "New York"},
  {"name": "Bob", "age": "25", "city": "London"}
]

第一行(标题)成为键。每一行后续都成为一个对象。

如何转换

  1. 粘贴您的CSV数据:输入带有标题行的逗号分隔数据。
  2. 选择您的分隔符:选择逗号、分号、制表符或管道符号。该工具在大多数情况下自动检测。
  3. 复制或下载:查看JSON输出并将其复制到剪贴板或下载为.json文件。

CSV和JSON的简史

CSV是较老的格式数十年。逗号分隔文本的概念可以追溯到1960年代和1970年代,作为在大型机程序之间交换数据的一种方式。IBM Fortran(1972)支持列表导向的I/O,产生逗号分隔的输出。CSV直到2005年的RFC 4180才被正式标准化,到那时已经存在数十亿个具有微妙变化(引用规则、行结尾、编码)的CSV文件。

JSON出现得晚得多:Douglas Crockford于2001年指定它,正式RFC 4627于2006年,ECMA-404于2013年。JSON是为Web设计的;CSV是为大型机上的批量数据处理设计的。这两种格式有不同的优势:

方面CSVJSON
结构平面表格(行+列)嵌套,分层
类型无类型(一切都是文本)有类型(字符串、数字、布尔、null、数组、对象)
标题第一行约定每个对象的字段名
大小表格数据紧凑更冗长,包括结构
工具Excel,所有电子表格每种现代编程语言
流式传输逐行容易默认整个文件解析(但存在JSON Lines)
严格规范RFC 4180(2005),经常被忽略RFC 8259(2017),严格

CSV到JSON的转换本质上是从面向行的平面数据到键值对象表示法的翻译。大多数困难在于处理CSV规范未预料到的边缘情况(引用值、嵌入分隔符、非UTF-8编码)。

处理棘手的CSV数据

引用值:当一个值包含分隔符字符(如带逗号的地址)时,它应该用双引号包装:"New York, NY"。好的转换器正确处理这个。

空值:空单元格在JSON中变为空字符串("field": "")。如果您需要它们为null,您可能需要后处理输出。

数字值:CSV没有数据类型。一切都是文本。JSON输出将以字符串形式包含数字("30"而不是30)。如果您的应用程序需要实际数字,请在转换后解析它们。

值中的换行:某些CSV文件有多行值(用引号括起来)。并非所有转换器都处理这个,请用您的特定数据测试。

转义引号:引用值内的引号通过加倍来转义:"她说""你好"""。大多数解析器正确处理这个。

尾随空白:像name ,age, city这样的标题中的额外空格会创建混乱的键。好的转换器默认修剪;有些字面保留空白。

字节顺序标记:文件开头的UTF-8 BOM可能显示为第一个标题的前三个字符。一些转换器去除BOM;其他不去除。

不同的行结尾:来自Windows的CSV文件有CRLF,Unix有LF,旧Mac有CR。强大的解析器处理所有三种。

输出格式变体

CSV到JSON转换器通常提供几种输出选项:

输出示例最佳用途
对象数组[{"a":1},{"a":2}]API响应,默认
对象的对象(以第一列为键){"id1":{"name":"x"},"id2":{...}}查找表,以ID为键的记录
数组的数组[["a","b"],[1,2],[3,4]]原始行数据保留顺序
列式{"a":[1,3],"b":[2,4]}统计分析(pandas友好)
JSON Lines(NDJSON){"a":1}\n{"a":2}流式传输,日志处理
按标题嵌套address.city得到[{"address":{"city":"NY"}}]来自平面CSV的嵌套数据

默认是对象数组,几乎适用于所有Web API场景。如果您有数百万行并需要流式处理,JSON Lines很有用。

类型推断

一些转换器提供类型推断:

对于您控制数据的内部使用,自动推断节省时间。对于不受信任的输入,将类型保留为字符串并在代码中显式解析。

常见陷阱

提示

隐私和机密数据

CSV到JSON转换器完全在您的浏览器中运行。您粘贴的数据、中间处理和输出JSON都保留在您的设备上。没有任何内容上传到服务器、记录或与任何人共享。

这很重要,因为您转换的CSV通常包含敏感数据:带电子邮件地址和电话号码的客户列表、带工资的员工记录、财务交易、销售管道数据、营销线索、内部产品分析、从EHR系统导出的医疗记录、学生成绩、付款历史。云CSV到JSON转换器记录每次粘贴,有时为「服务改进」保留它们,并参与了真实的数据泄露,其中粘贴的客户列表泄漏给监视日志的攻击者。基于浏览器的转换器没有任何暴露:数据永远不会离开您的机器。

基于浏览器的转换在页面加载后也可以离线工作,对于在飞机上、在没有互联网访问的安全环境中,或在任何您不能或不应将客户或财务数据粘贴到第三方服务的地方处理数据都很有用。

常见问题

表头行如何处理?

第一行用作 JSON 对象的键。后续每行成为带有这些键的对象。例如,表头「name,age」搭配行「Alice,30」会变成 {"name":"Alice","age":"30"}。

支持哪些分隔符?

支持逗号、分号、制表符和竖线。工具可以自动检测分隔符,也可以手动选择。

它能处理值中的逗号吗?

能。用双引号包围的值(如「New York, NY」)会被正确处理 · 引号内的逗号被视为值的一部分,而不是分隔符。

我的数据会发送到服务器吗?

不会。所有转换在您的浏览器中进行。数据从不离开您的设备。