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

𝕏 Twitterin LinkedIn
这篇文章有帮助吗?

保持更新

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

无垃圾邮件,随时退订。

试试这些相关工具

📊CSV ↔ JSON Converter{ }JSON FormatterTSJSON to TypeScript📊JSON to Table

相关文章

CSV 转 JSON 转换器完全指南:含代码示例

免费在线 CSV 转 JSON 转换器。学习如何转换 CSV 到 JSON,解析 CSV 文件,处理边界情况,含 JavaScript、Python、Bash 代码示例。

JSON 格式化与验证:在线美化、修复 JSON 完全指南

免费在线 JSON 格式化和验证工具。美化 JSON、查找语法错误,附 JavaScript 和 Python 代码示例。

JSON 解析错误:Unexpected Token — 如何查找并修复

逐步排查 JSON 解析错误。了解 unexpected token 错误的原因、如何定位问题,以及验证和修复 JSON 的工具。