CSV 转 JSON 转换器
在浏览器中将 CSV 转换为 JSON。支持 RFC 4180、类型推断、表头行、大整数安全。100% 隐私,无需上传。
选项 · , · auto · LF · header · no BOM · flatten
什么是 JSON?为什么要从 CSV 转换?
JSON(JavaScript Object Notation)是 API 响应、配置文件以及结构化数据交换的通用格式 — 每一种现代编程语言、每一个数据库和每一个 Web 框架都对 JSON 提供一等支持。相比之下,CSV(Comma-Separated Values,逗号分隔值)是历史最悠久、支持最广泛的表格格式 — 每一款电子表格应用、每一个数据库导出、每一个分析工具都能生成它。在两者之间转换是数据工程中最常见的杂活之一:你从电子表格、数据库转储或第三方导出收到 CSV,需要 JSON 来喂给 API、注水到前端或加载到 NoSQL 存储。本工具就是为这条转换路径而生,并能处理大多数在线转换器搞砸的四种场景。
与典型的在线 CSV 转 JSON 转换器相比,本工具有四个重要差异点:
**1. RFC 4180 状态机解析器。** CSV 看起来简单,但引号规则非常微妙:用双引号包裹的字段可以包含逗号、内嵌换行符以及转义的双引号(加倍如 "")。简单的按逗号分割解析器会在真实数据上崩溃 — 含逗号的地址、多行文本字段、含引号的引号值都会出错。本工具实现了遵循 RFC 4180(IETF 的 CSV 规范)的真正状态机解析器,在两个方向上都能正确处理带引号字段、内嵌分隔符、内嵌行结尾和转义引号。输出可在 Python 的 csv 模块、PostgreSQL COPY、AWS S3 SELECT 以及任何兼容解析器之间往返。
**2. 带大整数安全的类型推断。** 开启「推断类型」后,数字字符串会变成数字、true/false 会变成布尔值、空单元格会变成 null。但推断流水线有两个重要保护:前导零字符串(007、0123)会保留为字符串,因为前导零表明这是标识符 — 转换为数字会静默剥掉它们。超过 2^53 - 1(9007199254740991)的整数也会保留为字符串,以避免 IEEE 754 精度损失。Twitter snowflake ID、Discord ID、MongoDB Long 字段、K8s resourceVersion 都保持精确,不会被静默四舍五入。ISO 日期字符串会刻意保留为字符串 — JSON 没有原生的日期类型。
**3. 表头自动命名或使用首行。** 开启「首行为表头」(默认)时,首行被视为列名,每个后续行成为以这些名为键的 JSON 对象。关闭后,解析器会自动将列命名为 col1、col2、col3 — 适用于没有表头行的原始数据转储。分隔符按钮行覆盖四种最常见的分隔符:逗号(RFC 4180 默认)、分号(Excel-EU 区域)、制表符(Unix 工具与数据仓库的 TSV)和竖线(高逗号字段)。选按钮即解析 — 典型的真实 CSV 无需手动配置。
**4. 100% 浏览器端隐私。** 你的 CSV 数据 — 通常包含用户 PII、内部数据库导出、客户记录以及生产导出 — 永远不会离开你的浏览器。不会向任何服务器发送数据、不会记录、也不会有捕获输入的分析。你可以在浏览器的「网络」标签中验证。这是在线工具中处理敏感数据的唯一安全方式。点击「交换」查看反向,或在你的目标是 CSV 时使用我们的配套 JSON 转 CSV 转换器。在使用 JSON 输出前需要验证?请试试我们的 JSON 格式化工具。
JSON 的优势是精确的类型、原生的嵌套,以及在任何地方都能一致解析的严格规范 — 当机器消费数据时,是正确的格式。CSV 的优势是普适性和人类可读性 — 当人类打开电子表格时,是正确的格式。正确的工具取决于消费方:人类阅读电子表格 → CSV,机器消费 API → JSON。本转换器在两个方向上都处理了这座桥梁。
// Input CSV (comma + LF, header on, infer types on)
id,name,active,score
1,Alice,true,98.5
2,Bob,false,87
3,Carol,true,
// Output JSON
[
{ "id": 1, "name": "Alice", "active": true, "score": 98.5 },
{ "id": 2, "name": "Bob", "active": false, "score": 87 },
{ "id": 3, "name": "Carol", "active": true, "score": null }
]
// Same input with Header off (no first-row keys)
1,Alice,true,98.5
2,Bob,false,87
// Becomes
[
{ "col1": 1, "col2": "Alice", "col3": true, "col4": 98.5 },
{ "col1": 2, "col2": "Bob", "col3": false, "col4": 87 }
] 核心功能
RFC 4180 状态机解析器
遵循 IETF CSV 规范的严格状态机解析器:正确处理带引号字段、内嵌分隔符、内嵌 CR/LF 以及转义双引号(加倍)。输出可干净地往返于 Python csv、PostgreSQL COPY 和 AWS S3 SELECT。
带大整数安全的类型推断
开启「推断类型」会将数字字符串转换为数字、true/false 转换为布尔值、空单元格转换为 null。超过 2^53 - 1 的整数会保留为字符串以避免 IEEE 754 精度损失;前导零字符串(007、0123)会保留为字符串以保持标识符语义。
表头开/关与自动命名
开启「首行为表头」(默认)使用首行作为 JSON 键。关闭后自动将列命名为 col1、col2、col3 — 适用于没有表头行的原始数据转储和机器生成的 CSV。自动命名是确定性的,对流水线友好。
逗号、分号、制表符、竖线分隔符
面向四种最常见分隔符的一键按钮:`,`(RFC 4180 默认)、`;`(Excel-EU 区域)、`\t`(来自 Unix 工具、BigQuery、Snowflake 的 TSV)以及 `|`(高逗号自由文本字段)。解析器会立即切换模式 — 无需先转换文件。
大整数检测
解析过程中检测超过 2^53 的整数,并在 JSON 中以字符串形式保留 — Twitter snowflake ID、Discord ID、MongoDB Long 字段以及 K8s resourceVersion 保持精确,不会被 JavaScript 的 IEEE 754 数字类型静默四舍五入。
支持「交换」的双向转换
一个「交换方向」按钮即可原地翻转转换:输入变为 JSON、输出变为 CSV、当前文本保留。在两个方向上往返你的数据,在投入流水线前验证无损转换。
示例
带表头的电子表格导出
id,name,email,role 1,Alice,alice@example.com,admin 2,Bob,bob@example.com,editor 3,Carol,carol@example.com,viewer 4,Dan,dan@example.com,viewer
来自电子表格的标准 CSV。开启「首行为表头」并启用「推断类型」后,会得到整洁的带类型 JSON:整数仍是整数,布尔/null 也会被识别。
制表符分隔的日志导出(TSV)
ts event user duration 2026-05-09T10:00:00Z signup alice 142 2026-05-09T10:01:00Z login alice 87 2026-05-09T10:02:00Z checkout alice 312 2026-05-09T10:03:00Z logout alice 44
选择 `\t`(Tab)作为分隔符。默认开启的「首行为表头」会自动将首行作为键。
Excel-EU CSV(分号分隔符、CRLF)
id;name;price 1;Alice;1234,56 2;Bob;9876,54 3;Carol;42,00
Excel 在 DE/FR/IT/ES 区域设置中会输出 `;` 分隔符,因为逗号被用作小数点。从分隔符按钮中选择 `;` — 解析器会处理其余细节。
内嵌逗号与转义引号
name,role,note "Smith, Jr.",admin,"He said ""hi""" "Doe, Jane",editor,"Two lines"
标准 RFC 4180 引号规则:带引号的字段可以包含分隔符与转义引号(加倍)。解析器是状态机 — 不会在引号内部进行切分。
包含大整数 ID 的 CSV
id,event,user 9007199254740993,signup,alice 9007199254740994,login,bob 9007199254740995,checkout,carol
大整数超过了 JavaScript 的安全范围(2^53 - 1)。开启「推断类型」后,解析器会检测到这一点,并将值保留为字符串以保持精度 — 不会截断。
无表头 CSV
1,Alice,admin 2,Bob,editor 3,Carol,viewer 4,Dan,viewer
关闭「首行为表头」;列会被自动命名为 `col1`、`col2`、`col3`。适用于没有表头行的原始数据转储。
使用方法
- 1
粘贴 CSV
在上方输入框中输入或粘贴 CSV。工具接受逗号、分号、制表符和竖线分隔的数据。也可以点击「加载示例」试用电子表格导出、TSV 日志或带分号的 Excel-EU CSV 等示例。
- 2
选择分隔符(或 Tab)
点击 `,`(默认)、`;`(Excel-EU 分号)、`\t`(TSV)或 `|`(竖线),一键切换分隔符。打开选项面板进行精细控制:「首行为表头」开/关、「推断类型」开/关。关闭「首行为表头」会自动将列命名为 col1、col2、col3。
- 3
复制或下载 JSON
点击「复制」将 JSON 复制到剪贴板,或点击「下载」将其保存为 .json 文件,可直接用于你的代码、API 或流水线。如需往返,点击「交换方向」原地将 JSON 转回 CSV。
常见转换问题
源文件中内嵌逗号未加引号
如果你的 CSV 是用简单 join(',') 手工构建的,任何含有逗号的字段(Smith, Jr. 或 1,234.56)都会破坏列边界 — 解析器会看到本应是一列的位置上有多余的列。修复方法是按 RFC 4180 用双引号包裹问题字段。本工具能正确处理带引号字段,但源 CSV 必须使用正确的引号。
name,role Smith, Jr.,admin // Parser reads 3 columns: "Smith", " Jr.", "admin"
name,role "Smith, Jr.",admin // Parser reads 2 columns: "Smith, Jr.", "admin"
Excel-EU 分号被当作逗号解析
欧洲 Excel 区域设置(德国、法国、西班牙、意大利等)会输出分号分隔的 CSV,因为逗号被保留作小数分隔符。如果保留分隔符为 `,`(默认),每一行都会塌陷成包含内嵌分号的单列。请选择 `;` 分隔符按钮 — 解析器会切换到分号模式并产生正确的列。
// Wrong delimiter (default comma) on Excel-EU file
id;name;price
1;Alice;1234,56
// Each row becomes one column: { col1: "1;Alice;1234,56" } // Correct: pick `;` Delimiter chip
id;name;price
1;Alice;1234,56
// Output: { id: 1, name: "Alice", price: "1234,56" } JSON.parse 后大整数 ID 丢失精度
Twitter snowflake ID、Discord ID 以及其他 64 位整数超出 JavaScript 的安全范围(2^53 - 1),在 JSON.parse() 将其作为数字读取时会丢失精度。开启「推断类型」时,本工具会检测安全边界以上的值,将其保留为字符串,从而保持精确数字。在代码中使用 BigInt("9007199254740993") 转换回数字类型。
// Without big-int detection
{"id": 9007199254740993}
// JavaScript reads as 9007199254740992 (precision lost) // With Infer types on, big integers stay as strings
{"id": "9007199254740993"}
// Use BigInt(value) in code to preserve precision 表头行包含空格
如果你的 CSV 表头是 `id, name, email`(逗号后带空格),JSON 键会变成 "id"、" name"、" email" — 包括前导空格。按 RFC 4180,解析器会按给定的内容原样保留表头。修复方法要么在粘贴前清理源 CSV,要么在下游重命名键(jq 'with_entries(.key |= ltrimstr(" "))' 或 JavaScript Object.fromEntries(Object.entries(o).map(([k,v]) => [k.trim(), v])))。
id, name, email 1, Alice, alice@example.com // Output keys: "id", " name", " email" (with leading spaces)
id,name,email 1,Alice,alice@example.com // Output keys: "id", "name", "email" (clean)
行长度不一致
当 CSV 各行的列数不同时(部分行末尾有逗号,部分没有),解析器会用空字符串(或在开启「推断类型」时用 null)填充缺失的单元格,并丢弃超过表头长度的多余列。会出现 Schema notes 警告告知你这些行已被规范化。这通常没问题,但如果下游消费方期望严格的行形状,请验证输出。
name,role,note Alice,admin Bob,editor,first day // Row 1 is short by one cell
// Output (note empty/null cell in row 1)
[
{ "name": "Alice", "role": "admin", "note": null },
{ "name": "Bob", "role": "editor", "note": "first day" }
] 日期字符串被意外强制转换
ISO 8601 日期字符串(如 2026-05-09T10:00:00Z)会刻意作为字符串保留在 JSON 输出中 — JSON 没有原生的日期类型,强制转换要么生成无法在序列化中存活的 JavaScript Date 对象,要么生成丢失时区信息的数字时间戳。这是有意为之。请在代码中使用 new Date(value) 或你选择的日期库在使用时进行解析。不要仅为了保留日期就关闭「推断类型」 — 那会同时把数字也保留为字符串。
// Expecting a Date object in the output ts,event 2026-05-09T10:00:00Z,signup // Output ts is the string "2026-05-09T10:00:00Z", NOT a Date
// Correct: parse at the point of use in your code const rows = JSON.parse(output); const when = new Date(rows[0].ts); // when is now a Date object
常见使用场景
- 电子表格导出转 API 导入
- 粘贴从 Excel、Google Sheets 或 Numbers 导出的 CSV,获得可直接 POST 到 REST API、GraphQL mutation 或批量导入端点的 JSON 对象数组。这是最常见的场景 — 分析师产出电子表格数据,工程师需要带类型的 JSON 来喂给后端。
- Excel 导出转工具链
- 将 Excel CSV 导出(包括用 `;` 按钮处理的 Excel-EU 分号分隔文件)转换为 JSON,用于通过 JavaScript 工具、jq 脚本或任何读取 JSON 的系统处理。解析器会正确处理 BOM 剥离和 CRLF 行结尾,让 Excel 导出不会在首行出错。
- TSV 日志转分析
- 来自 BigQuery 导出、Snowflake 卸载、Vector 流水线或 Unix 工具(cut、awk)的制表符分隔日志通常以 .tsv 形式抵达。选择 Tab 分隔符按钮,获得带类型的 JSON 数组,可直接用于临时分析、仪表板摄取或流水线阶段转换。
- 数据库 CSV 转储转 ETL
- 将 PostgreSQL COPY TO CSV 输出、MySQL SELECT INTO OUTFILE 或任何数据库 CSV 转储转换为 JSON,用于加载到 NoSQL 存储、喂给 JavaScript ETL 流水线,或以行分隔 JSON 形式发送到 BigQuery。大整数检测可保留超出 JavaScript 安全范围的数字 ID。
- Postman/Newman CSV 测试结果消费
- Postman 测试运行会按请求导出 pass/fail 的 CSV 报告。转换为 JSON 用于编程消费 — 喂给状态仪表板、告警流水线或测试结果聚合器。形状不一致的行(失败测试有额外的 error 列)会用空/null 填充处理。
- 小型 CSV 转快速 JSON 配置
- 有一份常量的小型 CSV — 货币代码、国家名称、产品 SKU — 需要 JSON 数组用于配置文件或 JavaScript 常量?粘贴、复制、粘贴。开启「推断类型」时,数字和布尔会被正确分类;开启「首行为表头」时,会得到带命名字段的对象数组,可直接放入 .json 文件。
技术细节
- RFC 4180 状态机解析器内部
- 解析器是遵循 RFC 4180 的真正有限状态机实现。状态包括 UnquotedField、QuotedField、AfterQuote、RowEnd 和 EndOfInput。解析器能正确处理含分隔符的带引号字段、带引号字段内的内嵌 CR/LF、转义双引号(加倍如 "")以及尾随换行符。这能产生在 Python 的 csv 模块、PostgreSQL COPY、AWS S3 SELECT 以及任何兼容解析器之间无损往返的输出。状态机感知分隔符,因此从 `,` 切换到 `;` 或 `\t` 不会改变引号语义 — 只改变字段分隔符。
- 类型推断算法
- 开启「推断类型」时,每个单元格会经过有序的检测流水线。第一,空单元格变为 JSON null。第二,字面量字符串 true 和 false 变为 JSON 布尔值。第三,前导零字符串(^0[0-9]+$)保留为字符串以保持标识符语义 — 转换为数字会静默剥掉前导零。第四,整数字面量与安全整数边界(-2^53+1 到 2^53-1)比较;超出此范围的值保留为字符串以避免 IEEE 754 精度损失。第五,ISO 8601 日期字符串通过正则检测并刻意保留为字符串 — JSON 没有原生的日期类型。通过所有五个保护的内容会通过 Number()(数字)转换或保留为字符串(其他一切)。
- BOM 剥离与编码处理
- 所有输入均按 UTF-8 处理。可选的 UTF-8 BOM(0xEF 0xBB 0xBF)若存在则会从首行的首个单元格中静默剥除 — 这可以防止 BOM 字节作为多余字符包含在第一个列名的开头(Windows 上的 Excel 通常会输出 BOM,这会破坏简单解析器)。其他编码(Windows-1252、ISO-8859-1)不会被自动检测;当文本到达本工具时,浏览器 File API 已将字节解码为 UTF-8。如果你有非 UTF-8 输入,请先用 iconv 或编辑器的编码导出选项进行转换再粘贴。
最佳实践
- 非逗号数据请显式选择分隔符
- 不要依赖自动检测。如果你的 CSV 使用分号(Excel-EU)、制表符(来自 BigQuery、Snowflake 或 Unix 工具的 TSV)或竖线(高逗号字段),请在粘贴前点击对应的分隔符按钮。解析器感知分隔符:切换按钮会立即重新解析输入。这能避免最常见的 CSV 转 JSON 失败模式 — 因为解析器使用了错误的分隔符,每一行都塌陷成单个单元格。
- 保持「推断类型」开启以获得带类型 JSON
- 开启「推断类型」(默认)时,你会得到带类型的 JSON:数字是数字、布尔是布尔、空单元格处是 null。这是大多数消费方想要的 — API、前端、JavaScript 代码。仅当你明确需要每个单元格作为字符串时(下游严格类型的消费方、比较精确源字节的验证流水线)才关闭「推断类型」。检测流水线对前导零字符串、大整数和 ISO 日期都有保护,因此即使开启推断,标识符和日期也是安全的。
- 在上游 CSV 中将 ID 作为字符串加引号
- 如果你的 CSV 由你掌控的数据库或流水线生成,请将大数字 ID(Twitter snowflake、Discord ID、K8s resourceVersion)以加引号的 CSV 字符串形式输出("9007199254740993"),以便干净地通过类型推断。无论如何解析器都会将其保留为字符串(大整数检测会捕获 2^53 - 1 以上的值),但显式加引号是最稳健的上游契约,可避免对精度的任何歧义。
- 表头行应是首行
- 开启「首行为表头」(默认)会自动将首行检测为列名。如果你的 CSV 在表头之前有注释、空行或元数据,请在粘贴前剥除 — 解析器不会跳过前导的非数据行。对于无表头 CSV(原始导出、机器生成的转储),关闭「首行为表头」,列会按顺序自动命名为 col1、col2、col3。不要试图通过在无表头文件前添加一行来伪造表头;要么关闭「首行为表头」,要么修复源文件。
- CSV → JSON → CSV 往返请使用字符串化模式
- 如果你计划在两个方向上往返数据(CSV → JSON → CSV),反向(JSON → CSV)需要字符串化模式才能让任何嵌套数组或对象无损存活。反向中的展平模式会输出点分隔键(customer.address.city),无法被 CSV 解析器完美还原。完整的反向参考与往返测试说明请参见我们的 JSON 转 CSV 转换器。
常见问题
这个工具是做什么的?
我的数据会被上传到任何地方吗?
类型推断是如何工作的?
为什么大整数会保留为字符串?
我的 CSV 使用分号 — 该如何解析?
支持 TSV(制表符分隔)吗?
如果我的 CSV 没有表头行怎么办?
能处理含内嵌逗号的带引号字段吗?
为什么我的日期被保留为字符串?
如果各行长度不同会发生什么?
我可以粘贴多大的文件?
可以进行 JSON → CSV → JSON 往返吗?
相关工具
查看所有工具 →Base64 解码与编码工具
编码和格式化
免费在线 Base64 解码编码工具。实时转换,支持中文和 Emoji,100% 浏览器端运行,数据不离开设备,无需注册。
JSON Diff 对比
编码和格式化
在浏览器中即时对比两份 JSON。Side-by-Side 高亮 + RFC 6902 JSON Patch 输出,一键忽略 timestamps、IDs 等噪音字段。100% 隐私保护,零上传。
JSON 格式化与验证工具
编码和格式化
在浏览器中即时格式化、验证和美化 JSON。免费在线工具,支持语法验证、错误检测、压缩和一键复制,100% 隐私保护。
JSON Schema 验证器
编码和格式化
在浏览器中即时校验 JSON 是否符合任意 JSON Schema。支持 Draft 2020-12、2019-09 与 Draft-07,错误信息精确定位到 JSON Pointer 路径。100% 隐私保护,零上传、零账号、永久免费。
JSON 转 CSV 转换器
编码和格式化
在浏览器中将 JSON 转换为 CSV。支持 RFC 4180、Excel-EU、TSV、Pipe 预设。可展平嵌套或字符串化。100% 隐私,无需上传。
JSON 转 YAML 转换器
编码和格式化
粘贴 JSON 即时获得 YAML,浏览器端实时转换。支持 Kubernetes、Docker Compose 和 Terraform,提供 2/4 空格缩进、Norway 安全自动引号,100% 隐私保护,数据不离开设备。