CSV转JSON
将CSV数据转换为JSON数组或对象格式
本地运行 · 粘贴密钥安全无忧
CSV将显示在这里…
本地运行 · 粘贴密钥安全无忧
CSV输入
CSV将显示在这里…
JSON输出
什么是CSV转JSON转换?
CSV(逗号分隔值)是一种纯文本表格格式,每行为一条数据记录,记录内的字段由分隔符(通常为逗号)分隔。CSV自个人计算机早期便已成为标准的数据交换格式,并由RFC 4180正式规范。电子表格、数据库和数据导出工具均生成CSV,因为它简单、紧凑,且几乎所有编程语言都能读取。
JSON(JavaScript Object Notation)以键值对和有序数组的形式表示结构化数据。与CSV不同,JSON支持嵌套对象、类型化值(数字、布尔值、null)和变长记录。由于JSON能被JavaScript引擎原生解析,它已成为浏览器与服务器数据交换及REST API响应的主流格式。这些特性使JSON成为Web API、配置文件以及MongoDB、CouchDB等NoSQL数据库的默认格式。
将CSV转换为JSON,即把表格的每一行映射为一个JSON对象,以表头行作为属性名,单元格值作为属性值,最终生成一个JSON对象数组。凡是需要将平面表格数据输入到期望结构化JSON的系统时——例如REST API、前端数据表组件或文档型数据库——都需要进行此转换。
为什么使用此工具?
此转换器在浏览器中解析CSV,即时生成JSON输出,数据不会发送至任何服务器。
⚡
即时转换
粘贴CSV即可立即获得JSON输出。无需等待服务器往返或文件上传,输入时即时转换。
🔒
隐私优先处理
您的数据保留在浏览器标签页中,不会通过网络传输。适合处理不应离开本机的内部数据集、凭证或个人信息。
🔀
分隔符自动检测
工具可识别逗号、制表符、分号和竖线分隔符。如果文件使用非常规分隔符,您也可以手动指定。
📋
复制或下载
一键将JSON结果复制到剪贴板,或下载为.json文件。可直接用于代码、API客户端或数据库导入。
CSV转JSON使用场景
前端开发
将设计工具或电子表格导出的CSV转换为JSON,用作React、Vue或Angular组件在原型阶段的模拟数据。
后端API数据填充
将CSV数据库转储转换为JSON载荷,用于填充REST或GraphQL API。许多ORM和迁移工具支持JSON数据初始化。
DevOps配置
将CSV资产清单或环境矩阵转换为JSON,用于Ansible Playbook、Terraform变量文件或CI/CD流水线配置。
QA测试数据准备
将基于电子表格的测试矩阵转换为JSON数组,供Jest、pytest或Playwright等测试框架进行数据驱动测试。
数据工程流水线
将SQL查询或ETL导出的CSV结果转换为JSON,加载至MongoDB、Elasticsearch或BigQuery的JSON摄取模式等文档存储系统。
学生项目与学习
快速将示例CSV数据集(Kaggle、政府开放数据平台)转换为JSON,用于Web开发课程作业、教程或个人项目。
CSV分隔符参考
CSV文件并非总是使用逗号。分隔符取决于区域设置、导出应用程序及数据内容。以下是四种最常见的分隔符及其典型使用场景:
| 分隔符 | 标准 | 扩展名 | 说明 |
|---|---|---|---|
| Comma (,) | RFC 4180 default | .csv | Most common; Excel default export |
| Tab (\t) | TSV variant | .tsv | Avoids quoting fields that contain commas |
| Semicolon (;) | European locale CSV | .csv | Used where comma is the decimal separator (DE, FR, BR) |
| Pipe (|) | Fixed-width alternative | .csv | Rare in field values, good for messy data |
CSV与JSON:结构差异
两种格式之间的差距,决定了在转换过程中需要对表头映射、类型推断和缺失值处理做出明确决策。
CSV
平面行式格式。每条记录字段数相同。除非消费方进行类型推断,否则所有值均为字符串。不支持嵌套或变长记录。按RFC 4180规范,表头行可选,但对于有意义的JSON转换则为必需。
JSON
树形结构、自描述格式。每个对象可以有不同的键。值有类型:字符串、数字、布尔值、null、对象或数组。支持任意嵌套深度。JSON规范(ECMA-404)不保证属性顺序,但大多数解析器会保留插入顺序。
代码示例
如何在常用编程语言和命令行工具中以编程方式将CSV转换为JSON:
JavaScript (browser / Node.js)
// Simple CSV string → JSON array
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`
const [headerLine, ...rows] = csv.trim().split('\n')
const headers = headerLine.split(',')
const json = rows.map(row => {
const values = row.split(',')
return Object.fromEntries(headers.map((h, i) => [h, values[i]]))
})
// → [{ name: "Alice", age: "30", city: "Berlin" }, ...]
// With the built-in fetch + a library (Papa Parse)
import Papa from 'papaparse'
const result = Papa.parse(csvString, { header: true, dynamicTyping: true })
console.log(result.data) // typed numbers and booleansPython
import csv, json, io
csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""
reader = csv.DictReader(io.StringIO(csv_string))
data = [row for row in reader]
print(json.dumps(data, indent=2))
# → [{"name": "Alice", "age": "30", "city": "Berlin"}, ...]
# With type coercion (age as int)
import pandas as pd
df = pd.read_csv(io.StringIO(csv_string))
print(df.to_json(orient="records", indent=2))
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]Go
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"strings"
)
func main() {
input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
r := csv.NewReader(strings.NewReader(input))
records, _ := r.ReadAll()
headers := records[0]
var result []map[string]string
for _, row := range records[1:] {
obj := make(map[string]string)
for i, h := range headers {
obj[h] = row[i]
}
result = append(result, obj)
}
out, _ := json.MarshalIndent(result, "", " ")
fmt.Println(string(out))
// → [{"age":"30","city":"Berlin","name":"Alice"}, ...]
}CLI (jq + Miller)
# Using Miller (mlr) — handles quoting, types, and edge cases
mlr --icsv --ojson cat data.csv
# → [{"name": "Alice", "age": 30, "city": "Berlin"}, ...]
# Using csvjson from csvkit (Python-based)
csvjson data.csv
# Using jq with @csv (reverse: JSON → CSV)
# For CSV → JSON, pipe through Miller or Python
cat data.csv | python3 -c "
import csv, json, sys
reader = csv.DictReader(sys.stdin)
json.dump(list(reader), sys.stdout, indent=2)
"常见问题
转换器如何处理没有表头行的CSV文件?
如果CSV没有表头行,转换器会使用自动生成的键名,如"field1"、"field2"等。为获得最佳效果,请在转换前添加表头行,或在转换后重命名JSON输出中的键名。
包含逗号或换行符的引用字段如何处理?
解析器遵循RFC 4180引用规则。用双引号括起来的字段可以包含逗号、换行符,甚至双引号(转义为"")。转换器会去除外层引号,并将内部内容保留为单个JSON字符串值。
转换是否保留数字和布尔值等数据类型?
CSV是无类型格式,所有单元格值均为字符串。此转换器默认输出字符串值以避免数据丢失。如需类型化输出,请在应用程序中解析JSON结果并显式转换字段。Papa Parse(JavaScript)和pandas(Python)等库在解析时提供动态类型选项。
可以转换使用分号或制表符代替逗号的CSV吗?
可以。工具支持逗号、制表符、分号和竖线分隔符。从下拉菜单中选择正确的分隔符,或启用自动检测。分号在欧洲区域设置导出的Excel CSV中很常见,因为逗号在这些区域用作小数分隔符。
CSV输入有文件大小限制吗?
由于处理完全在浏览器中进行,实际限制取决于设备的可用内存。在现代硬件上,10-20 MB以内的文件通常可正常转换。对于非常大的文件(数百MB),建议使用Node.js中的Papa Parse或Python的csv模块等流式解析器,它们逐行处理数据,无需将全部内容加载至内存。
如何处理列数不一致的CSV行?
不规则CSV(字段数少于或多于表头的行)在实际导出中很常见。此转换器用空字符串填充缺失字段,并忽略超出表头数量的多余字段。如果数据持续不规则,请检查源文件是否存在未转义的分隔符或缺失引号。
JSON数组输出与JSON对象输出有什么区别?
JSON对象数组是标准输出:每行CSV变为数组中的一个对象,以表头名称为键。部分工具还提供"列式"输出,即每个表头成为一个键,对应该列所有值的数组。对象数组格式在API、数据库和前端数据绑定中更为常见。