CSV → JSON 转换器,免费

将逗号分隔值转换为 JSON 数组或对象。

关于 CSV → JSON

CSV(Comma-Separated Values)是简单的表格数据格式,而 JSON(JavaScript Object Notation)是 API 和 Web 应用的标准格式。此工具在两者之间转换,正确处理带引号的字段、转义字符和多种分隔符。当勾选「首行为表头」时,列名将成为 JSON 对象的键。

工作原理

  1. 粘贴您的 CSV:将 CSV 文本粘贴到输入框中。从下拉菜单中选择与您数据匹配的分隔符(逗号、制表符、分号或竖线)。
  2. 配置选项:如果第一行是列名(会成为 JSON 键),请勾选「第一行为表头」。勾选「自动识别类型」可自动将数字和布尔值转换为对应类型。
  3. 转换:每行 CSV 会变成一个带表头键的 JSON 对象;无表头时变为简单数组。
  4. 复制或下载:复制 JSON 数组或下载为 .json 文件,用于代码或 API。

为什么把 CSV 转为 JSON?

CSV 是表格软件、数据库和分析工具的通用导出格式 , 但大多数现代 API、JavaScript 应用和 NoSQL 数据库使用 JSON。把 Google Sheets、Excel、Airtable 或数据库工具导出的 CSV 转为 JSON,是数据工程、Web 开发和 API 集成中的日常任务。这款转换器能处理常见情况:带逗号的引号字段、引号内转义引号、Windows 行尾(CRLF),以及通过智能类型检测处理数字与字符串混合列。

功能特性

什么是 CSV 到 JSON 转换?

CSV 到 JSON 转换将平面表格文本文件(逗号分隔值的行)转换为 JSON 数组,其中每行成为按列标题索引的对象。同样的数据(「name,age」换行「Alice,30」换行「Bob,25」)从两行 CSV 转为两个对象的 JSON 数组,每个对象都有 name 和 age 字段。该转换是可逆的(json-to-csv 覆盖反向)。

CSV 仍然是电子表格(Excel、Google Sheets、Numbers、LibreOffice Calc)和 SQL 数据库(mysqldump、pg_dump)的通用导出格式。JSON 是 Web API、NoSQL 数据库和 JavaScript 应用程序的主导格式。在它们之间转换是数据工程、ETL 管道和前端工作中最常见的互操作任务。

这个转换器处理四种分隔符(逗号、分号、制表符、竖线)、可选的标题行,以及数字和布尔类型的自动检测。它实现了 RFC 4180 引用规则,所以带有嵌入逗号、换行符或双引号的引用字段能正确解析。输出是带两空格缩进的美化 JSON,可直接复制或下载。

转换器内部有什么

顶部控制栏暴露三个会改变解析行为的旋钮:分隔符下拉菜单(逗号、分号、制表符或竖线)、首行作为标题复选框,以及自动检测类型复选框。先选择与源数据匹配的分隔符,然后决定标题行是应被提升为对象键还是保留为数据行。

两个文本区域显示左侧的 CSV 输入和右侧的 JSON 输出。输出是只读的,在点击转换为 JSON 后更新。按钮下方的行数计数器显示解析器识别的行数;如果它与您的预期不符,请仔细检查分隔符或在输入中寻找不平衡的引号。

面板下方有五个操作按钮:转换为 JSON 运行转换,复制将输出写入剪贴板,示例加载一个示例 CSV 以便您看到预期格式,清除清空两个文本区域,下载将 JSON 保存为 .json 文件。当您点击示例时,还有一个隐藏的预览表会弹出,以表格布局显示已解析的行。

历史和背景

Hollerith 打孔卡开创表格数据(1890)

1890 年美国人口普查在 Herman Hollerith 的打孔卡上运行,每张卡片承载固定位置的数据列。行与列作为数据格式的概念比数字计算机早 50 年。每种现代表格格式(CSV、TSV、Excel、Parquet)的矩形形状都可以追溯到打孔卡。从 Hollerith 专利发展而来的 Computing-Tabulating-Recording 公司在 1924 年成为 IBM。

CSV 源自 FORTRAN 列表导向 I/O(1972)

IBM 1972 年的 FORTRAN 编译器引入了列表导向 I/O,逗号分隔的值可以在一次调用中读入多个变量。该约定传播到 BASIC、大型机报告格式和早期个人计算。到 1980 年代,大多数电子表格程序(VisiCalc、Lotus 1-2-3、Excel)都可以导出逗号分隔的文本。没有单一规范,所以方言激增。

RFC 4180 标准化 CSV(2005)

Yakov Shafranovich 的 RFC 4180 于 2005 年 10 月发布,为 CSV 提供了第一份广泛引用的规范。它定义了 CRLF 行结束符的使用、双引号转义(引用字段内的引号写为两个引号)和单一分隔符字符。该 RFC 是 Informational(参考性),而非 Proposed Standard(建议标准),所以许多工具仍然偏离它,但 RFC 4180 仍是格式良好的 CSV 应该是什么样子的规范参考。

JSON 规范(2001)和标准化(2013)

Douglas Crockford 在 2001 年 4 月记录了 JSON。这是序列化 JavaScript 对象的明显格式,但很快传播到每种语言。ECMA-404 在 2013 年标准化,RFC 8259 在 2017 年取代 RFC 4627。该格式有意保持极简(没有注释、没有模式),这正是它成为 API 通用语言的原因。

语言区域特定的 CSV 变体出现(1990 年代起)

在使用逗号作为小数分隔符的国家(法国、德国、欧洲大陆大部分地区、巴西),Excel 用分号分隔符导出 CSV,以避免与小数逗号冲突。在英语国家,逗号保留。同一个 Excel 安装根据操作系统区域设置生产不同的 CSV,这就是为什么这个转换器暴露分隔符下拉菜单而不是猜测。

PapaParse 和浏览器内 CSV 的兴起(2014)

Matt Holt 的 PapaParse(2014)成为事实上的 JavaScript CSV 解析器。它的设计(自动检测分隔符、用 web workers 处理大文件、严格遵守 RFC 4180)成为后续每个浏览器内转换器的模板。这个工具实现了一个更轻量级的解析器,针对四种常见分隔符和最常被引用的 RFC 4180 案例进行调优,没有 workers(对这个 UI 典型的千字节到兆字节输入来说是不必要的)。

实用工作流

电子表格导出到 API 请求体

您从 Google Sheets 导出了 200 行的联系人列表作为 CSV。在此粘贴,保持首行作为标题勾选,点击转换。输出 JSON 数组可直接 POST 到期望批量创建的 CRM API 端点。

来自 CSV 的数据库种子文件

您有一个来自遗留系统的产品 CSV。转换为 JSON,保存为 seed.json,然后用 mongoimport 或 AWS CLI 加载到 MongoDB 或 DynamoDB。JSON 数组直接映射到集合,无需显式模式。

图表库的数据(D3、Chart.js、Recharts)

D3.js 通过 d3.csv 直接接受 CSV,但 Chart.js 和 Recharts 需要 JSON。在此转换您的月度销售 CSV,将结果数组放入您的 React 组件,并传递给图表 prop。自动检测类型选项确保数字列变成实际的数字,而不是字符串。

前端的模拟数据

在后端存在之前构建 UI 时,模拟数据放在用 require 或 fetch 导入的 JSON 文件中很合适。在电子表格中草拟您的记录,导出 CSV,在此转换,并粘贴到 mockData.json。通过编辑电子表格(比手动编辑 JSON 更容易)和重新转换来迭代。

用 jq 进行日志文件分析

有些服务器日志是 CSV 风格的。转换为 JSON,然后通过 jq 进行过滤、排序和聚合。该转换弥补了平面文件日志与期望结构化记录的流处理工具之间的差距。

CMS 批量导入

无头 CMS 平台(Contentful、Sanity、Strapi、Directus)通常接受 JSON 导入。编辑人员在熟悉的电子表格中写内容,您在此转换并运行一次性导入脚本。标题行成为映射到您 CMS 模式的字段名。

常见陷阱

带内部逗号的引用字段

像 1,"Smith, John",30 这样的行有三个逻辑字段,而不是四个,因为引用字段内的逗号是数据,不是分隔符。该解析器遵守 RFC 4180 双引号转义,但格式错误的 CSV(缺少结束引号、引号不匹配)会产生无意义的 JSON。先使用 CSV linter 或将文件导入电子表格,以浮现结构错误。

引用字段内的嵌入换行符

RFC 4180 允许在双引号字段内有字面换行符,但许多简单的基于行的解析器将每个换行符视为记录分隔符。如果您的 CSV 在引号内有多行注释或地址,行数可能与视觉行数不匹配。这个转换器正确处理它们,但下游工具可能不会。

文件开头的字节序标记(BOM)

Windows 工具(尤其是 Excel)有时会用三字节 BOM(EF BB BF)前缀 UTF-8 CSV 文件。当您从带 BOM 前缀的文件复制时,第一个标题获得了一个不可见的前缀,使您代码中的「name」与「name」不匹配。在十六进制编辑器中打开文件,或用一行(unix 中 sed,PowerShell 中 Get-Content)去除 BOM,然后再在此粘贴。

根据区域设置的逗号与分号

法语区域设置的 Excel 导出使用分号,因为逗号是小数分隔符。用默认的逗号分隔符导入会将 1,234 拆分为两个字段。始终选择与源匹配的分隔符。如果不确定,在纯文本编辑器中查看第一行;明显的分隔符就是您想要的。

类型强制时丢失的前导零

邮政编码、电话号码和产品 SKU 通常以零开头(例如「01234」)。自动检测类型将这些强制为整数,丢失前导零(1234)。对于前导零重要的列,取消勾选自动检测类型,使值保持为字符串。或者转换后手动用引号包裹受影响的字段。

Excel 公式注入(CSV 炸弹)

如果 CSV 单元格以 =、+、- 或 @ 开头,Excel 在打开文件时可能会将其评估为公式。=cmd|'/c calc'!A1 在 Windows 机器上启动计算器。这是一种已知的攻击载体,当 Web 应用程序将用户控制的数据导出到 CSV 时会发生。转换为 JSON 中和了威胁(JSON 没有公式评估),但原始 CSV 仍然危险。

隐私和数据处理

所有解析都在您的浏览器中使用小型 JavaScript 函数进行。我们不将您的 CSV 或 JSON 发送到服务器,不记录输入,也不存储输出。复制和下载按钮通过标准用户手势 API 与您的操作系统交互,对第三方不可见。

页面加载后,该工具可以离线运行。您可以从网络断开连接,转换客户列表、内部 SKU 或任何不应离开您设备的数据。该工具对于 HIPAA 相邻工作流是安全的,因为数据路径从不跨越外部边界。

什么时候不使用这个转换器

非常大的文件(超过 10 MB)

该转换器将整个输入保留在内存中并以同步方式处理,这会冻结具有数百万行 CSV 的浏览器选项卡。对于超过 10 兆字节的文件,使用流式解析器(Python csv 模块、Node 的 csv-parse、Rust 的 csv crate),它一次读取一行。

单元格中的嵌套对象形状

CSV 设计上是平的。如果您的数据在单元格内有嵌套对象或数组(例如,带有逗号分隔值的标签列),转换将其视为字符串,而不是数组。您将需要在 JavaScript 或 Python 中进行后处理步骤来拆分字符串并重建嵌套形状。

二进制或非 UTF-8 数据

来自旧 Windows 系统的 CSV 文件可能编码为 Windows-1252(CP-1252)而不是 UTF-8。粘贴到 UTF-8 文本区域时,特殊字符(é、ñ、ü)显示为乱码。在文本编辑器中将文件重新保存为 UTF-8(或从命令行运行 iconv),然后再粘贴。

实时流数据

如果您的 CSV 正在被持续追加(类似 tail 的日志提要),这个批处理工具无法跟上。使用通过 websocket 的流式解析器或具有 CSV 摄取模式的数据库(Postgres COPY FROM、MySQL LOAD DATA INFILE)。

更多问题

解析器严格遵守 RFC 4180 吗?

大部分是。解析器处理双引号转义(引用字段内的两个引号意味着字面引号)、带有嵌入逗号和换行符的引用字段,以及 CRLF 或 LF 行结束符。它通过接受具有前导或尾部空格的未引用字段(规范不允许)偏离严格 RFC 4180。这种实用的容忍度匹配大多数现实世界 CSV 导出器发出的内容。

Excel 怪异的 CSV 如何影响输出?

Excel 给 UTF-8 文件添加 BOM,有时使用 Windows-1252 编码,在非英语区域设置中偏好分号。在粘贴前去除 BOM 并重新保存为 UTF-8。从下拉菜单中选择正确的分隔符。注意类数字列上的前导零;当您打开 CSV 时,Excel 经常自己丢弃它们。

带 BOM 的 UTF-8 与纯 UTF-8 有什么区别?

带 BOM 的 UTF-8 有一个三字节前缀(EF BB BF)用来标识编码。大多数 Web 工具(浏览器、JSON 解析器)偏好不带 BOM 的纯 UTF-8。如果您的 CSV 来自 Excel 的 UTF-8 导出,BOM 可能存在,第一个标题字段会静默地包含它。在粘贴前去除 BOM(sed -i '1s/^\xEF\xBB\xBF//' file.csv)。

我可以在 CSV 单元格内嵌入 JSON 吗?

可以,通过用双引号将 JSON 括起来并转义内部引号。转换器将单元格视为字符串,因此内部的 JSON 在输出中保持为字符串。后处理步骤(在您代码中对该字段进行 JSON.parse)重建嵌入的对象。这是在电子表格导出中携带 JSON 的常见模式。

为什么我的输出 JSON 缺少某些列?

很可能某一行的列数少于标题(导出时尾随空单元格被丢弃)。解析器为缺失值发出 undefined,JSON.stringify 会丢弃它,所以结果对象的键比预期少。在电子表格中打开源文件以查看哪些行较短,并修复数据或后处理以填充默认值。

这是否支持 TSV(制表符分隔值)?

是的,从分隔符下拉菜单中选择制表符。当 CSV 文件会有太多引用单元格时(因为制表符在电子表格单元格中很少是有效数据),TSV 文件很常见。解析器以相同方式处理 TSV,除了分隔符;引用和转义规则相同。

相关工具