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 中:

  1. 打开 Excel 并创建新工作簿
  2. 转到 数据 → 获取数据 → 从文件 → 从 JSON
  3. 选择您的 JSON 文件
  4. 使用 Power Query 编辑器转换数据
  5. 点击"关闭并加载"以导入
  6. 使用 文件 → 另存为 → CSV(逗号分隔)保存为 CSV

在 Google Sheets 中:

  1. 创建新电子表格
  2. 如果您的 JSON 托管在线,使用 IMPORTDATA() 函数
  3. 或将 JSON 粘贴到单元格中并使用 Apps Script 进行解析
  4. 使用 文件 → 下载 → 逗号分隔值 下载为 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 转换器时,优先考虑这些功能:

典型工作流程

大多数在线转换器遵循此模式:

  1. 粘贴 JSON 文本或上传 JSON 文件
  2. 工具验证并解析 JSON 结构
  3. 配置转换选项(分隔符、标题、展平)
  4. 预览 CSV 输出
  5. 下载转换后的文件

专业提示: 对于敏感数据,始终使用在浏览器中本地处理的工具。检查浏览器的网络选项卡以验证没有数据被上传到外部服务器。

基于编程的解决方案

当您需要定期转换 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