什么是 JSON/CSV 转换
JSON/CSV 转换是将 JSON 数组(对象列表)与 CSV 表格格式之间互相转换的过程。JSON 适合程序处理,CSV 适合 Excel 和数据分析工具。
转换示例
JSON → CSV:
[
{ "name": "张三", "age": 28, "city": "上海" },
{ "name": "李四", "age": 32, "city": "北京" }
]
CSV 输出:
name,age,city
张三,28,上海
李四,32,北京
JSON vs CSV 适用场景
| 场景 | JSON | CSV | |------|------|-----| | Web API | ✅ 首选 | ❌ 不适合 | | Excel 处理 | ❌ 不直接支持 | ✅ 原生支持 | | 嵌套数据 | ✅ 支持 | ❌ 不支持 | | 数据分析 | ⚠️ 需要解析 | ✅ 直接分析 | | 数据导出 | ⚠️ 不直观 | ✅ 用户友好 | | 配置文件 | ✅ 适合 | ❌ 不适合 | | 大数据量 | ⚠️ 文件较大 | ✅ 文件较小 |
为什么需要 JSON/CSV 转换
- 数据分析:将 API 返回的 JSON 导入 Excel/Google Sheets 分析
- 数据导出:将数据库查询结果(JSON)导出为 CSV 供用户下载
- 数据迁移:在不同系统之间迁移数据
- 报表生成:将 JSON 数据转换为 CSV 生成报表
- 批量操作:在 Excel 中批量编辑后导回 JSON
- 数据可视化:许多可视化工具支持 CSV 输入
转换挑战
嵌套 JSON 的展平
JSON 支持嵌套结构,CSV 不支持。需要「展平」嵌套对象:
// 原始 JSON
{ "name": "张三", "address": { "city": "上海", "zip": "200000" } }
// 展平后
{ "name": "张三", "address.city": "上海", "address.zip": "200000" }
数组字段的处理
JSON 中的数组在 CSV 中需要特殊处理:
{ "name": "张三", "tags": ["developer", "admin"] }
常见处理方式:用分隔符连接(developer;admin)或拆分为多行。
如何使用在线工具
使用 DevToolkit Pro 的 JSON/CSV 转换器:
- 粘贴 JSON 数组或 CSV 数据
- 工具自动检测格式并转换
- 支持嵌套 JSON 展平
- 自定义分隔符和引号处理
- 预览转换结果并复制
代码中的转换
JavaScript:JSON → CSV
function jsonToCSV(jsonArray) {
if (!jsonArray.length) return '';
// 展平嵌套对象
const flatten = (obj, prefix = '') =>
Object.entries(obj).reduce((acc, [key, val]) => {
const fullKey = prefix ? `${prefix}.${key}` : key;
if (typeof val === 'object' && val !== null && !Array.isArray(val)) {
Object.assign(acc, flatten(val, fullKey));
} else {
acc[fullKey] = Array.isArray(val) ? val.join(';') : val;
}
return acc;
}, {});
const flatData = jsonArray.map(item => flatten(item));
const headers = Object.keys(flatData[0]);
const rows = flatData.map(row =>
headers.map(h => {
const val = String(row[h] ?? '');
return val.includes(',') || val.includes('"') || val.includes('\n')
? `"${val.replace(/"/g, '""')}"` : val;
}).join(',')
);
return [headers.join(','), ...rows].join('\n');
}
JavaScript:CSV → JSON
function csvToJSON(csv) {
const lines = csv.trim().split('\n');
const headers = lines[0].split(',').map(h => h.trim());
return lines.slice(1).map(line => {
const values = line.split(',');
return headers.reduce((obj, header, i) => {
let val = values[i]?.trim() ?? '';
// 自动类型转换
if (val === 'true') val = true;
else if (val === 'false') val = false;
else if (val === 'null') val = null;
else if (!isNaN(val) && val !== '') val = Number(val);
obj[header] = val;
return obj;
}, {});
});
}
FAQ
JSON 中的嵌套对象怎么转 CSV?
需要先「展平」嵌套对象。常见方式:用点号连接键名(address.city)或下划线(address_city)。在线工具通常自动处理展平。
CSV 转 JSON 后数字类型丢失了怎么办?
CSV 没有类型信息,所有值都是字符串。转换时需要添加类型推断逻辑:检测数字字符串转为 Number,true/false 转为布尔值。
JSON 数组中的嵌套数组怎么处理?
JSON 数组可以嵌套其他数组或对象。转 CSV 时需要决定:展平为多行(每行一个元素)还是合并为一个字段(用分隔符连接)。取决于你的使用场景。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
JSON 解析报错 Unexpected token?5 种常见原因和修复方法
JSON 解析报错 Unexpected token?本文总结 5 种最常见的 json 格式错误原因:尾逗号、单引号、未转义字符、BOM 头、注释,逐一给出修复方法和代码示例。
JSON Schema 完全指南:从入门到实战
深入理解 JSON Schema 的核心概念、使用场景和最佳实践。学习如何手动编写和自动生成 JSON Schema,掌握 JSON 数据校验技巧。
2026 年最佳在线 JSON 格式化工具对比与推荐
对比 5 款主流在线 JSON 格式化工具,从功能、速度、隐私、免费程度等维度评测。DevToolkit Pro 凭借本地运行、Unicode 安全、免费无限制脱颖而出。