将 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 转换器。
- 打开 CSV-JSON 转换器工具。
- 选择 JSON 转 CSV 方向。
- 粘贴 JSON 数据或上传文件。
- 点击转换,工具自动扁平化嵌套对象。
- 复制 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.csvjq 方法适合扁平或结构一致的 JSON 数组。@csv 过滤器处理正确的 CSV 转义。
复杂转换可使用 jq 的变量、条件和递归下降功能来扁平化嵌套对象。
方法五:用 Excel Power Query 转换
Excel Power Query 提供可视化、无代码的 JSON 数据导入和转换方式:
- 打开 Excel,数据 > 获取数据 > 从文件 > 从 JSON。
- 选择文件,Power Query 编辑器打开。
- 点击"转到表"转换为表格格式。
- 展开嵌套列。
- 关闭并加载到工作表。
- 另存为 CSV。
Power Query 记住转换步骤,源文件更新后可刷新查询。Google Sheets 也支持 JSON 导入。
处理嵌套 JSON:扁平化策略
JSON 转 CSV 最大的挑战是处理嵌套对象和数组:
点标记扁平化:嵌套键用点连接,如 user.address.city。
数组处理:可用分隔符连接元素、为每个元素创建行、或创建编号列。
选择性提取:只提取需要的字段而非扁平化所有内容。
方法对比:如何选择?
| 方法 | 最适合 | 嵌套处理 | 安装要求 |
|---|---|---|---|
| 在线工具 | 快速一次性转换 | 自动扁平化 | 无 |
| Python pandas | 数据科学、自动化 | 优秀 | pip install pandas |
| JavaScript | Web 应用 | 良好 | npm install json2csv |
| jq | Shell 脚本 | 手动 | 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。
Related Developer Tools and Guides
- CSV-JSON Converter - Convert between CSV and JSON formats instantly
- JSON Formatter - Format and beautify JSON data with syntax highlighting
- JSON Viewer - Interactive tree-view JSON explorer
- JSON to TypeScript - Generate TypeScript interfaces from JSON
- JSON to Excel - Convert JSON data to Excel spreadsheets
- XML to JSON - Convert XML to JSON format
- JSON to YAML - Convert between JSON and YAML
- JSON Validator - Validate JSON syntax and find errors
- JSON to Go - Create Go structs from JSON data