JSON 转 CSV:将 JSON 数据转换为电子表格格式
· 12 分钟阅读
目录
理解 JSON 和 CSV 格式
在深入研究转换技术之前,让我们先建立对这两种格式的扎实理解。JSON(JavaScript 对象表示法)和 CSV(逗号分隔值)在数据生态系统中服务于不同的目的,了解它们的优势有助于您有效地使用它们。
JSON 是一种轻量级的数据交换格式,既易于人类阅读,也易于机器解析。它已成为 API 和 Web 服务的事实标准,因为它能够自然地处理复杂的数据结构。您会发现 JSON 无处不在——从配置文件到 API 响应再到 NoSQL 数据库。
以下是典型的 JSON 结构示例:
{
"users": [
{
"id": 1,
"name": "Sarah Chen",
"email": "[email protected]",
"role": "developer",
"active": true
},
{
"id": 2,
"name": "Marcus Johnson",
"email": "[email protected]",
"role": "designer",
"active": false
}
]
}
另一方面,CSV 以表格格式表示数据——类似于电子表格的行和列。每一行是一条记录,逗号分隔该记录中的字段。CSV 文件与电子表格应用程序、数据库和数据分析工具具有通用兼容性。
相同数据的 CSV 格式:
id,name,email,role,active
1,Sarah Chen,[email protected],developer,true
2,Marcus Johnson,[email protected],designer,false
当您使用这些格式时,它们之间的关键差异就会变得明显:
| 特性 | JSON | CSV |
|---|---|---|
| 结构 | 分层结构,支持嵌套 | 扁平的表格行和列 |
| 数据类型 | 字符串、数字、布尔值、数组、对象、null | 全部是文本(字符串) |
| 文件大小 | 由于格式字符较大 | 更小,更紧凑 |
| 人类可读性 | 适合复杂数据 | 非常适合简单的表格数据 |
| 工具支持 | API、Web 应用程序、NoSQL 数据库 | 电子表格、SQL 数据库、数据分析工具 |
专业提示: 使用我们的 JSON 格式化和验证工具 在转换前检查您的 JSON 结构。有效的 JSON 对于成功转换为 CSV 至关重要。
为什么要转换 JSON 到 CSV?
将 JSON 转换为 CSV 不仅仅是一项技术练习——它解决了实际的业务问题。了解何时以及为何转换有助于您对数据工作流做出更好的决策。
数据分析和可视化
分析师和数据科学家通常更喜欢 CSV,因为它与他们的工具无缝集成。Excel、Google Sheets、Tableau 和 R 都原生支持 CSV 文件。当您从 API 接收 JSON 数据但需要创建数据透视表、图表或统计分析时,CSV 成为连接这些强大工具的桥梁。
例如,如果您从电子商务 API 提取销售数据,JSON 响应可能包含数百笔交易。转换为 CSV 可以让您快速导入到 Excel,创建汇总表,并为利益相关者演示生成可视化图表。
数据库导入操作
许多关系数据库为 CSV 文件提供优化的批量导入功能。PostgreSQL 的 COPY 命令、MySQL 的 LOAD DATA INFILE 以及其他数据库中的类似功能可以在几秒钟内处理数百万行 CSV 数据。虽然可以导入 JSON,但通常需要更复杂的解析且速度较慢。
在系统之间迁移数据或执行初始数据库填充时,CSV 转换可以显著减少导入时间。
简单性和兼容性
CSV 文件被普遍理解。您可以将 CSV 文件通过电子邮件发送给任何人,他们都可以打开它——无需特殊软件。这使得 CSV 非常适合:
- 与非技术利益相关者共享数据
- 创建易于恢复的数据备份
- 生成合规性报告
- 以几十年后仍可访问的格式归档数据
性能和文件大小
对于具有简单结构的大型数据集,CSV 文件明显小于其等效的 JSON 文件。格式字符(括号、引号、冒号)的减少可以使文件大小减少 30-50%。当您通过网络传输数据或存储大型档案时,这一点很重要。
遗留系统集成
许多在 JSON 时代之前构建的企业系统仍然期望 CSV 输入。将 JSON 转换为 CSV 可以让您将现代 API 与遗留系统集成,而无需进行大量系统重写。这在金融、医疗保健和制造业等行业中尤为常见,这些行业的旧系统仍在生产中。
快速提示: 并非所有 JSON 数据都应该转换为 CSV。如果您的数据具有深层嵌套或复杂关系,请考虑将其保留为 JSON 或使用 XML 或文档数据库等格式。
简单转换方法
让我们探索将 JSON 转换为 CSV 的最直接方法,从不需要编程知识的方法开始。
使用电子表格应用程序
Excel 和 Google Sheets 都可以直接导入 JSON 数据,尽管有一些限制。此方法最适合简单、扁平的 JSON 结构。
在 Microsoft Excel 中:
- 打开 Excel 并创建新工作簿
- 转到 数据 → 获取数据 → 从文件 → 从 JSON
- 选择您的 JSON 文件
- 使用 Power Query 编辑器转换数据
- 点击"关闭并加载"以导入
- 使用 文件 → 另存为 → CSV(逗号分隔)保存为 CSV
在 Google Sheets 中:
- 创建新电子表格
- 如果您的 JSON 托管在线,使用
IMPORTDATA()函数 - 或将 JSON 粘贴到单元格中并使用 Apps Script 进行解析
- 使用 文件 → 下载 → 逗号分隔值 下载为 CSV
命令行工具
对于熟悉终端的开发人员,命令行工具提供快速转换而无需编写代码。jq 实用程序对于 JSON 操作特别强大。
在您的系统上安装 jq:
# macOS
brew install jq
# Ubuntu/Debian
sudo apt-get install jq
# Windows (使用 Chocolatey)
choco install jq
将简单的 JSON 数组转换为 CSV:
jq -r '.[] | [.id, .name, .email] | @csv' input.json > output.csv
此命令从每个 JSON 对象中提取特定字段并将它们格式化为 CSV 行。-r 标志输出不带 JSON 引号的原始字符串,@csv 处理正确的 CSV 转义。
使用在线转换工具
在线转换器提供从 JSON 到 CSV 的最快路径,无需安装任何东西。它们非常适合一次性转换或在无法安装软件的机器上工作时使用。
要寻找的功能
在选择在线 JSON 到 CSV 转换器时,优先考虑这些功能:
- 隐私: 确保工具在客户端(在您的浏览器中)处理数据,而不是上传到服务器
- 大小限制: 检查最大文件大小——一些工具限制为 1MB,而其他工具可处理 100MB+
- 嵌套数据处理: 它能否展平嵌套对象和数组?
- 自定义: 分隔符选择、标题包含和字段选择的选项
- 预览: 下载前预览结果的能力
典型工作流程
大多数在线转换器遵循此模式:
- 粘贴 JSON 文本或上传 JSON 文件
- 工具验证并解析 JSON 结构
- 配置转换选项(分隔符、标题、展平)
- 预览 CSV 输出
- 下载转换后的文件
专业提示: 对于敏感数据,始终使用在浏览器中本地处理的工具。检查浏览器的网络选项卡以验证没有数据被上传到外部服务器。
基于编程的解决方案
当您需要定期转换 JSON 到 CSV 或作为自动化工作流的一部分时,编程解决方案提供灵活性和强大功能。让我们探索流行语言中的实现。
Python 实现
Python 的内置库使 JSON 到 CSV 转换变得简单。以下是处理常见场景的强大解决方案:
import json
import csv
def json_to_csv(json_file, csv_file):
# 读取 JSON 数据
with open(json_file, 'r') as f:
data = json.load(f)
# 处理单个对象和对象数组
if isinstance(data, dict):
data = [data]
# 从第一个对象提取标题
headers = data[0].keys()
# 写入 CSV
with open(csv_file, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=headers)
writer.writeheader()
writer.writerows(data)
# 使用
json_to_csv('input.json', 'output.csv')
对于具有嵌套数据的更复杂场景,pandas 库提供强大的工具:
import pandas as pd
# 读取 JSON 并规范化嵌套结构
df = pd.read_json('input.json')
# 如果需要,展平嵌套列
df = pd.json_normalize(data)
# 导出为 CSV
df.to_csv('output.csv', index=False)
JavaScript/Node.js 实现
对于 JavaScript 开发人员,Node.js 提供多种方法。以下是使用流行的 json2csv 库的解决方案:
const { parse } = require('json2csv');
const fs = require('fs');
// 读取 JSON 文件
const jsonData = JSON.parse(fs.readFileSync('input.json', 'utf8'));
// 转换为 CSV
const csv = parse(jsonData);
// 写入 CSV 文件
fs.writeFileSync('output.csv', csv);
无需外部库的自定义控制:
const fs = require('fs');
function jsonToCsv(jsonData) {
const array = Array.isArray(jsonData) ? jsonData : [jsonData];
const headers = Object.keys(array[0]);
const csvRows = [
headers.join(','),
...array.map(row =>
headers.map(header =>
JSON.stringify(row[header] ?? '')
).join(',')
)
];
return csvRows.join('\n');
}
const data = JSON.parse(fs.readFileSync('input.json', 'utf8'));
const csv = jsonToCsv(data);
fs.writeFileSync('output.csv', csv);
其他语言解决方案
| 语言 | 流行库 | 最适合 |
|---|---|---|
| Ruby | json, csv (内置) | Rails 应用程序、脚本编写 |
| Java | Jackson, OpenCSV | 企业应用程序、Android |