DevToolBox免费
博客广告合作

JSON 转 CSV:5 种方法将 JSON 转换为 CSV

11 分钟阅读作者 DevToolBox

JSON 转换为 CSV 是开发者和分析师最常见的数据转换任务之一。无论是将 API 数据导入电子表格、为传统系统准备数据集,还是生成非技术人员可在 Excel 中打开的报告,掌握 JSON 转 CSV 的方法都很重要。本指南涵盖五种方法:在线工具、Python pandas、JavaScript/Node.js、jq 命令行和 Excel Power Query。

使用我们的免费在线 CSV-JSON 转换器即时将 JSON 转换为 CSV。

为什么要将 JSON 转换为 CSV?

JSON 是 Web API、NoSQL 数据库和现代应用的标准数据格式。CSV 是电子表格、数据库和数据分析工具支持的通用表格格式。

常见场景包括:导出 API 数据到 Excel 分析、准备 SQL 数据库导入、生成可读报告、系统间数据迁移、为 Tableau 等可视化工具准备数据。

JSON 转 CSV 的主要挑战是扁平化嵌套结构。JSON 支持任意嵌套,而 CSV 严格是二维的。

方法一:在线转换 JSON 为 CSV(最快)

在线转换工具是无需编写代码即可将 JSON 转换为 CSV 的最快方式:

试用我们的免费 JSON 转 CSV / CSV 转 JSON 转换器。

  1. 打开 CSV-JSON 转换器工具。
  2. 选择 JSON 转 CSV 方向。
  3. 粘贴 JSON 数据或上传文件。
  4. 点击转换,工具自动扁平化嵌套对象。
  5. 复制 CSV 或下载文件。

在线工具适合一次性转换和快速数据检查。数据在浏览器中处理,不会离开您的机器。

方法二:用 Python pandas 转换

Python pandas 是数据科学和后端工作流中最常用的 JSON 转 CSV 方法:

import pandas as pd
import json

# === Method 1: Flat JSON array ===
# Read JSON file directly into a DataFrame
df = pd.read_json('data.json')
df.to_csv('output.csv', index=False)

# === Method 2: Nested JSON with json_normalize ===
with open('data.json', 'r') as f:
    data = json.load(f)

# Flatten nested objects (e.g., user.address.city)
df = pd.json_normalize(data)
df.to_csv('output_flat.csv', index=False)

# === Method 3: Nested JSON with specific record_path ===
# For JSON like: {"results": [{"name": "A", "scores": [1,2]}]}
df = pd.json_normalize(
    data,
    record_path='items',           # path to the array
    meta=['id', 'name'],           # fields from parent
    meta_prefix='parent_',
    sep='.'                        # separator for nested keys
)
df.to_csv('output_nested.csv', index=False)

# === Method 4: Handle missing fields ===
df = pd.json_normalize(data)
df.fillna('', inplace=True)        # replace NaN with empty string
df.to_csv('output_clean.csv', index=False, encoding='utf-8-sig')

pd.json_normalize() 是处理嵌套 JSON 的关键,它递归扁平化嵌套对象为点分列名。

不安装 pandas 时,可使用 Python 内置的 csv 和 json 模块:

import json
import csv

# Read JSON
with open('data.json', 'r') as f:
    data = json.load(f)

# Write CSV using built-in modules
if isinstance(data, list) and len(data) > 0:
    keys = data[0].keys()  # column headers from first object

    with open('output.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=keys)
        writer.writeheader()
        writer.writerows(data)

    print(f"Converted {len(data)} rows to CSV")

标准库方法轻量级,适合简单的扁平 JSON 数组。嵌套 JSON 推荐使用 pandas。

方法三:用 JavaScript / Node.js 转换

JavaScript 是 JSON 转 CSV 的自然选择,因为 JSON 是原生 JavaScript 格式:

// === Browser: Convert JSON array to CSV string ===
function jsonToCsv(jsonData) {
  if (!Array.isArray(jsonData) || jsonData.length === 0) return '';

  const headers = Object.keys(jsonData[0]);
  const csvRows = [
    headers.join(','),  // header row
    ...jsonData.map(row =>
      headers.map(header => {
        const value = row[header] ?? '';
        // Escape quotes and wrap in quotes if needed
        const str = String(value);
        return str.includes(',') || str.includes('"') || str.includes('\n')
          ? `"${str.replace(/"/g, '""')}"`
          : str;
      }).join(',')
    )
  ];
  return csvRows.join('\n');
}

// Usage
const data = [
  { name: "Alice", age: 30, city: "NYC" },
  { name: "Bob", age: 25, city: "London" }
];
const csv = jsonToCsv(data);
console.log(csv);

// === Node.js: Read JSON file, write CSV file ===
const fs = require('fs');
const data = JSON.parse(fs.readFileSync('data.json', 'utf-8'));
const csv = jsonToCsv(data);
fs.writeFileSync('output.csv', csv, 'utf-8');

// === Using json2csv package (recommended for production) ===
// npm install json2csv
const { parse } = require('json2csv');
const opts = {
  fields: ['name', 'age', 'address.city'],  // dot notation for nested
  flatten: true,
  defaultValue: ''
};
const csvOutput = parse(data, opts);
fs.writeFileSync('output.csv', csvOutput);

生产环境建议使用 json2csv npm 包处理引号、嵌套和自定义分隔符。

Node.js 方法读取 JSON 文件,提取表头,写入 CSV。大文件使用流式处理。

方法四:用 jq 命令行转换

jq 是轻量级命令行 JSON 处理器,可用一条命令完成 JSON 转 CSV:

# === Basic: Flat JSON array to CSV ===
# Input: [{"name":"Alice","age":30},{"name":"Bob","age":25}]
jq -r '(.[0] | keys_unsorted) as $keys |
  ($keys | @csv),
  (.[] | [.[$keys[]]] | @csv)' data.json > output.csv

# === Select specific fields ===
jq -r '["name","age","city"],
  (.[] | [.name, .age, .city]) | @csv' data.json

# === Handle nested objects with dot notation ===
jq -r '["name","street","city"],
  (.[] | [.name, .address.street, .address.city]) | @csv' data.json

# === Handle arrays by joining elements ===
jq -r '["name","tags"],
  (.[] | [.name, (.tags | join(";"))]) | @csv' data.json

# === Pipe from curl (API response to CSV) ===
curl -s "https://api.example.com/users" | \
  jq -r '(.[0] | keys_unsorted) as $k |
  ($k | @csv), (.[] | [.[$k[]]] | @csv)' > users.csv

jq 方法适合扁平或结构一致的 JSON 数组。@csv 过滤器处理正确的 CSV 转义。

复杂转换可使用 jq 的变量、条件和递归下降功能来扁平化嵌套对象。

方法五:用 Excel Power Query 转换

Excel Power Query 提供可视化、无代码的 JSON 数据导入和转换方式:

  1. 打开 Excel,数据 > 获取数据 > 从文件 > 从 JSON。
  2. 选择文件,Power Query 编辑器打开。
  3. 点击"转到表"转换为表格格式。
  4. 展开嵌套列。
  5. 关闭并加载到工作表。
  6. 另存为 CSV。

Power Query 记住转换步骤,源文件更新后可刷新查询。Google Sheets 也支持 JSON 导入。

处理嵌套 JSON:扁平化策略

JSON 转 CSV 最大的挑战是处理嵌套对象和数组:

点标记扁平化:嵌套键用点连接,如 user.address.city

数组处理:可用分隔符连接元素、为每个元素创建行、或创建编号列。

选择性提取:只提取需要的字段而非扁平化所有内容。

方法对比:如何选择?

方法最适合嵌套处理安装要求
在线工具快速一次性转换自动扁平化
Python pandas数据科学、自动化优秀pip install pandas
JavaScriptWeb 应用良好npm install json2csv
jqShell 脚本手动brew install jq
Excel业务用户可视化展开Excel

JSON 转 CSV 的技巧

避免常见问题的最佳实践:

先检查 JSON 结构:使用 JSON Viewer 工具可视化探索结构。

优雅处理缺失字段:确保转换方法插入空值而非移位列。

注意特殊字符:包含逗号、引号或换行的字段需正确转义。

选择合适的分隔符:某些地区使用分号。数据包含很多逗号时考虑 TSV。

保留数据类型:CSV 是文本格式,数字和布尔值会丢失类型信息。

常见问题

如何在线将 JSON 转换为 CSV?

使用 DevToolBox CSV-JSON 转换器(viadreams.cc/zh/tools/csv-json),粘贴 JSON 数据,选择 JSON 转 CSV 方向,点击转换。工具自动扁平化嵌套对象并生成可下载的 CSV。

Excel 可以打开 JSON 文件吗?

可以。在 Excel 中使用 Power Query:数据 > 获取数据 > 从文件 > 从 JSON。也可以先将 JSON 转换为 CSV 再用 Excel 打开。

如何将嵌套 JSON 转换为 CSV?

嵌套 JSON 需要先扁平化。使用 Python pandas 的 pd.json_normalize() 自动点标记扁平化,jq 自定义过滤器,或自动处理嵌套的在线工具。

JSON 转 CSV 最好的 Python 库是什么?

pandas 是最佳选择。使用 pd.json_normalize() 处理嵌套 JSON,pd.read_json() 处理扁平 JSON。简单场景可使用内置 json 和 csv 模块。

可以转换大型 JSON 文件(1GB+)为 CSV 吗?

可以,但需要流式处理。Python 中使用 ijson + csv.writer,Node.js 中使用 JSONStream,jq 使用 --stream 标志。在线工具通常有大小限制。

将 JSON 转换为 CSV 是基础数据转换技能。快速转换使用在线工具,自动化工作流使用 Python pandas,命令行使用 jq,Excel 用户使用 Power Query。

使用我们的免费在线工具即时将 JSON 转换为 CSV。

Related Developer Tools and Guides

这篇文章有帮助吗?

保持更新

获取每周开发技巧和新工具通知。

无垃圾邮件,随时退订。

合作推荐

赞助这篇文章

把你的产品放到这个开发者主题旁边,并追踪点击效果。

咨询文章赞助

本站使用 Cookie 进行流量分析与广告展示。继续浏览即视为同意。 隐私政策