如何将 CSV 转换为 JSON
CSV(逗号分隔值)是表格数据最简单的格式,每个电子表格都可以导出它。JSON(JavaScript对象表示法)是Web API和现代应用程序的标准格式。在它们之间转换是开发中最常见的数据任务之一。基于浏览器的转换器在本地处理整个工作,而无需将您的数据上传到服务器。
何时需要CSV转JSON
- 将数据加载到Web应用程序中:大多数JavaScript框架原生使用JSON,而不是CSV
- API有效负载:如果您在电子表格中有数据需要发送到API端点,它需要是JSON
- 数据库导入:许多NoSQL数据库(MongoDB、Firebase)直接接受JSON
- 配置文件:将设置电子表格转换为JSON配置文件
- 数据分析:将导出的数据转换为您的工具可以处理的格式
- GraphQL突变:通过GraphQL端点从电子表格批量插入记录
- 测试夹具:将电子表格中的测试用例列表转换为JSON以进行自动化测试
- Webhook有效负载:当服务期望JSON但您在电子表格中有数据时
- 国际化(i18n)文件:具有键/区域设置列的翻译电子表格成为JSON目录
- 从遗留系统迁移:旧系统通常导出CSV;新系统通常使用JSON
- 将数据加载到LLM中:结构化的JSON比CSV更容易让ChatGPT、Claude推理
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"}
]
第一行(标题)成为键。每一行后续都成为一个对象。
如何转换
- 粘贴您的CSV数据:输入带有标题行的逗号分隔数据。
- 选择您的分隔符:选择逗号、分号、制表符或管道符号。该工具在大多数情况下自动检测。
- 复制或下载:查看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是为大型机上的批量数据处理设计的。这两种格式有不同的优势:
| 方面 | CSV | JSON |
|---|---|---|
| 结构 | 平面表格(行+列) | 嵌套,分层 |
| 类型 | 无类型(一切都是文本) | 有类型(字符串、数字、布尔、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很有用。
类型推断
一些转换器提供类型推断:
- 关闭(默认安全):每个值都是字符串。可预测,但需要接收代码进行解析。
- 自动:检测数字、布尔值、null、日期。
"30"变为30,"true"变为true,""变为null。方便但容易出错(像"00525"这样的邮政编码变为525)。 - 架构驱动:提供JSON架构或列类型提示;将每列转换为其指定的类型。最适合生产数据。
对于您控制数据的内部使用,自动推断节省时间。对于不受信任的输入,将类型保留为字符串并在代码中显式解析。
常见陷阱
- 前导零丢失:具有前导零的电话号码、邮政编码或产品ID列(
00525,09876)成为数字,丢失零,除非您将其保留为字符串。引用这些列或禁用类型推断。 - Excel公式注入:以
=开头的CSV值(=SUM(...))最初是电子表格公式。转换为JSON保留字面文本,但如果您重新导入到电子表格,公式会执行。对用户上传的CSV去除前导=、+、-、@。 - 编码不匹配:从Windows上的Excel导出的CSV通常是Windows-1252或Latin-1,而不是UTF-8。非ASCII字符(重音符、表情符号)在转换时变为乱码。先将CSV保存为UTF-8。
- 列数不一致:某些行的字段数多于或少于标题。严格的解析器会失败;宽松的会填充或截断。验证您的数据具有一致的形状。
- 重复的标题:
name, name, age是模糊的。大多数转换器只保留具有重复名称的最后一个值;有些将它们设为name,name_2。在源处重命名。 - 带点或括号的标题:列
address.city可能被某些转换器解释为嵌套JSON({"address":{"city":...}})。选择正确的输出模式。 - 混合引号字符:某些源使用单引号或智能引号(弯曲)而不是直双引号。大多数转换器期望直双引号。
- 尾随换行:以
\n结尾的CSV可能或可能不会产生额外的空对象。修剪尾随空格。 - 缺少标题行:如果您的CSV没有标题,转换器可能使用第一行数据作为键(错误)。添加标题或使用数组的数组输出。
- 非常大的文件:100 MB的CSV产生200+ MB的JSON。浏览器内存可能会挣扎。对于大文件,使用JSON Lines(NDJSON)并逐行处理。
提示
- 检查您的标题:第一行必须是干净、唯一的列名。空格、特殊字符或重复的标题会创建混乱的JSON键。
- 验证分隔符:欧洲CSV通常使用分号而不是逗号(因为在许多欧洲国家逗号用作十进制分隔符)。如果转换看起来不对,请尝试不同的分隔符。
- 格式化输出:转换后,通过格式化工具运行JSON以使其在项目中使用之前可读。
- 抽样检查结果:将JSON输出的几行与原始CSV进行比较,以确保映射正确,特别是对于具有许多列的文件。
- 从Excel保存为UTF-8:在Excel中,选择「CSV UTF-8(逗号分隔)」而不是普通的「CSV」以避免编码问题。Apple Numbers和Google Sheets默认为UTF-8。
- 对大文件先使用CSV linter:像
csvlint或csvkit这样的工具在您转换之前捕获格式错误的行。 - 先采样,后转换:对于50,000行的CSV,转换前100行作为测试,验证输出形状,然后转换其余部分。
- 保留原件:永远不要删除源CSV。如果您的JSON看起来不对,您需要原件来重新处理。
- 对于深度嵌套数据,编写一个小脚本:一行CSV到JSON转换适合~80%的情况。对于复杂嵌套(每行多个项目的数组、条件字段),Python加pandas加自定义转换比任何通用转换器都更灵活。
隐私和机密数据
CSV到JSON转换器完全在您的浏览器中运行。您粘贴的数据、中间处理和输出JSON都保留在您的设备上。没有任何内容上传到服务器、记录或与任何人共享。
这很重要,因为您转换的CSV通常包含敏感数据:带电子邮件地址和电话号码的客户列表、带工资的员工记录、财务交易、销售管道数据、营销线索、内部产品分析、从EHR系统导出的医疗记录、学生成绩、付款历史。云CSV到JSON转换器记录每次粘贴,有时为「服务改进」保留它们,并参与了真实的数据泄露,其中粘贴的客户列表泄漏给监视日志的攻击者。基于浏览器的转换器没有任何暴露:数据永远不会离开您的机器。
基于浏览器的转换在页面加载后也可以离线工作,对于在飞机上、在没有互联网访问的安全环境中,或在任何您不能或不应将客户或财务数据粘贴到第三方服务的地方处理数据都很有用。
常见问题
表头行如何处理?
第一行用作 JSON 对象的键。后续每行成为带有这些键的对象。例如,表头「name,age」搭配行「Alice,30」会变成 {"name":"Alice","age":"30"}。
支持哪些分隔符?
支持逗号、分号、制表符和竖线。工具可以自动检测分隔符,也可以手动选择。
它能处理值中的逗号吗?
能。用双引号包围的值(如「New York, NY」)会被正确处理 · 引号内的逗号被视为值的一部分,而不是分隔符。
我的数据会发送到服务器吗?
不会。所有转换在您的浏览器中进行。数据从不离开您的设备。