如何将 JSON 转换为 Excel(反之亦然)
学习如何将 JSON 转换为 Excel 文件。涵盖在线工具、Python pandas、JavaScript 库和自动化转换方法。
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# 如何将 JSON 转换为 Excel(反之亦然)
JSON 和 Excel 是两种最常用的数据格式。本综合指南将向您展示使用在线工具、Python、JavaScript 等在它们之间转换的每种方法。
为什么转换 JSON 到 Excel?
用例
- 📊 数据分析:在 Excel 中分析 API 数据
- 👥 团队协作:与非技术用户共享数据
- 📈 可视化:创建图表和数据透视表
- 📁 报告:生成业务报告
- 🔄 数据迁移:在系统之间传输数据
优势
- ✅ Excel 被广泛使用和理解
- ✅ 强大的数据分析功能
- ✅ 易于与团队共享
- ✅ 支持格式化和公式
- ✅ 无需编程知识
在线转换器
Big JSON Viewer
最佳综合工具 步骤:- ✅ 处理大文件(100MB+)
- ✅ 保留数据类型
- ✅ 处理嵌套结构
- ✅ 免费使用
ConvertCSV.com
步骤:JSON-Excel-CSV
特点:- 批量转换
- 自定义分隔符
- 多工作表支持
Code Beautify
快速简单:Python 与 Pandas
基本安装
pip install pandas openpyxl
简单转换
import pandas as pd
import json
# 从文件加载 JSON
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 转换为 DataFrame
df = pd.DataFrame(data)
# 保存到 Excel
df.to_excel('output.xlsx', index=False, engine='openpyxl')
print("转换完成!")
处理嵌套 JSON
import pandas as pd
import json
# 加载嵌套 JSON
with open('nested.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# 展平嵌套结构
df = pd.json_normalize(data, sep='_')
# 保存到 Excel
df.to_excel('flattened.xlsx', index=False)
示例数据:
[
{
"name": "张三",
"age": 30,
"address": {
"city": "北京",
"district": "朝阳"
}
}
]
输出列:
- name
- age
- address_city
- address_district
多工作表
import pandas as pd
# 准备数据
users_df = pd.DataFrame([
{"name": "张三", "age": 30},
{"name": "李四", "age": 25}
])
orders_df = pd.DataFrame([
{"order_id": 1, "amount": 100},
{"order_id": 2, "amount": 200}
])
# 写入多个工作表
with pd.ExcelWriter('output.xlsx', engine='openpyxl') as writer:
users_df.to_excel(writer, sheet_name='用户', index=False)
orders_df.to_excel(writer, sheet_name='订单', index=False)
print("多工作表 Excel 已创建!")
高级格式化
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill
# 创建 Excel
df.to_excel('styled.xlsx', index=False)
# 加载并应用样式
wb = load_workbook('styled.xlsx')
ws = wb.active
# 标题样式
header_fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
header_font = Font(color="FFFFFF", bold=True)
for cell in ws[1]:
cell.fill = header_fill
cell.font = header_font
# 保存
wb.save('styled.xlsx')
处理大型 JSON
import pandas as pd
import json
def convert_large_json(input_file, output_file, chunksize=1000):
"""分块转换大型 JSON 文件"""
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
# 分块处理
total_rows = len(data)
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
for i in range(0, total_rows, chunksize):
chunk = data[i:i + chunksize]
df = pd.DataFrame(chunk)
# 附加到同一工作表
if i == 0:
df.to_excel(writer, sheet_name='数据', index=False)
else:
df.to_excel(writer, sheet_name='数据',
index=False, header=False,
startrow=i+1)
print(f"已转换 {total_rows} 行")
# 使用
convert_large_json('large_data.json', 'output.xlsx')
JavaScript/Node.js
使用 xlsx 库
安装:npm install xlsx
基本转换:
const XLSX = require('xlsx');
const fs = require('fs');
// 读取 JSON
const jsonData = JSON.parse(fs.readFileSync('data.json', 'utf8'));
// 转换为工作表
const worksheet = XLSX.utils.json_to_sheet(jsonData);
// 创建工作簿
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, '数据');
// 写入文件
XLSX.writeFile(workbook, 'output.xlsx');
console.log('Excel 文件已创建!');
自定义列标题
const XLSX = require('xlsx');
const data = [
{ name: "张三", age: 30, city: "北京" },
{ name: "李四", age: 25, city: "上海" }
];
// 自定义标题
const worksheet = XLSX.utils.json_to_sheet(data, {
header: ["姓名", "年龄", "城市"]
});
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
XLSX.writeFile(workbook, 'custom_headers.xlsx');
多工作表
const XLSX = require('xlsx');
const users = [
{ name: "张三", age: 30 },
{ name: "李四", age: 25 }
];
const orders = [
{ orderId: 1, amount: 100 },
{ orderId: 2, amount: 200 }
];
const workbook = XLSX.utils.book_new();
const usersSheet = XLSX.utils.json_to_sheet(users);
const ordersSheet = XLSX.utils.json_to_sheet(orders);
XLSX.utils.book_append_sheet(workbook, usersSheet, '用户');
XLSX.utils.book_append_sheet(workbook, ordersSheet, '订单');
XLSX.writeFile(workbook, 'multi_sheet.xlsx');
处理嵌套对象
const XLSX = require('xlsx');
const data = [
{
name: "张三",
address: {
city: "北京",
district: "朝阳"
}
}
];
// 展平对象
const flattened = data.map(item => ({
name: item.name,
city: item.address.city,
district: item.address.district
}));
const worksheet = XLSX.utils.json_to_sheet(flattened);
const workbook = XLSX.utils.book_new();
XLSX.utils.book_append_sheet(workbook, worksheet, '数据');
XLSX.writeFile(workbook, 'flattened.xlsx');
Excel 到 JSON
Python (Pandas)
import pandas as pd
import json
# 读取 Excel
df = pd.read_excel('input.xlsx', engine='openpyxl')
# 转换为 JSON
json_data = df.to_dict('records')
# 保存到文件
with open('output.json', 'w', encoding='utf-8') as f:
json.dump(json_data, f, ensure_ascii=False, indent=2)
# 或直接获取 JSON 字符串
json_string = df.to_json(orient='records', force_ascii=False, indent=2)
print(json_string)
JavaScript (xlsx)
const XLSX = require('xlsx');
const fs = require('fs');
// 读取 Excel
const workbook = XLSX.readFile('input.xlsx');
const sheetName = workbook.SheetNames[0];
const worksheet = workbook.Sheets[sheetName];
// 转换为 JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet);
// 保存到文件
fs.writeFileSync('output.json', JSON.stringify(jsonData, null, 2));
console.log('JSON 文件已创建!');
读取多个工作表
import pandas as pd
import json
# 读取所有工作表
excel_file = pd.ExcelFile('input.xlsx')
result = {}
for sheet_name in excel_file.sheet_names:
df = pd.read_excel(excel_file, sheet_name=sheet_name)
result[sheet_name] = df.to_dict('records')
# 保存
with open('all_sheets.json', 'w', encoding='utf-8') as f:
json.dump(result, f, ensure_ascii=False, indent=2)
命令行工具
使用 jq 和 csvkit
安装:# macOS
brew install jq csvkit
# Ubuntu
sudo apt-get install jq csvkit
# Windows (Scoop)
scoop install jq csvkit
JSON 到 CSV:
jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ]])[] | @csv' data.json > output.csv
CSV 到 Excel(使用 Python):
python -c "import pandas as pd; pd.read_csv('input.csv').to_excel('output.xlsx', index=False)"
实际示例
示例 1:API 响应到 Excel
import requests
import pandas as pd
# 从 API 获取数据
response = requests.get('https://api.example.com/users')
data = response.json()
# 转换为 Excel
df = pd.DataFrame(data['users'])
df.to_excel('api_users.xlsx', index=False)
示例 2:GitHub 仓库数据
import requests
import pandas as pd
# 获取 GitHub 仓库
response = requests.get('https://api.github.com/users/microsoft/repos')
repos = response.json()
# 提取相关字段
data = [{
'名称': repo['name'],
'星标': repo['stargazers_count'],
'语言': repo['language'],
'描述': repo['description']
} for repo in repos]
# 保存到 Excel
df = pd.DataFrame(data)
df.to_excel('github_repos.xlsx', index=False)
示例 3:嵌套电商数据
import pandas as pd
import json
# 复杂的嵌套 JSON
data = {
"order_id": "ORD123",
"customer": {
"name": "张三",
"email": "zhangsan@example.com"
},
"items": [
{"product": "笔记本电脑", "price": 5999, "qty": 1},
{"product": "鼠标", "price": 99, "qty": 2}
]
}
# 展平订单
order_info = {
"订单ID": data["order_id"],
"客户姓名": data["customer"]["name"],
"客户邮箱": data["customer"]["email"]
}
# 展平商品
items_df = pd.DataFrame(data["items"])
items_df = items_df.rename(columns={
"product": "产品",
"price": "价格",
"qty": "数量"
})
# 添加订单信息到每个商品
for key, value in order_info.items():
items_df[key] = value
# 保存
items_df.to_excel('orders.xlsx', index=False)
最佳实践
1. 处理缺失值
import pandas as pd
import json
# 处理 null/None 值
df = pd.DataFrame(data)
df = df.fillna('') # 或使用其他默认值
df.to_excel('output.xlsx', index=False)
2. 数据类型保留
# 保留数据类型
df.to_excel('output.xlsx', index=False)
# 读取时指定类型
df = pd.read_excel('input.xlsx', dtype={'phone': str})
3. 大文件优化
# 使用分块
chunk_size = 10000
for chunk in pd.read_json('large.json', lines=True, chunksize=chunk_size):
# 处理每个块
process_chunk(chunk)
4. 错误处理
import pandas as pd
import json
def safe_convert(input_file, output_file):
try:
with open(input_file, 'r', encoding='utf-8') as f:
data = json.load(f)
df = pd.DataFrame(data)
df.to_excel(output_file, index=False)
print(f"成功转换为 {output_file}")
return True
except json.JSONDecodeError:
print("错误:无效的 JSON 文件")
except Exception as e:
print(f"错误:{e}")
return False
# 使用
safe_convert('data.json', 'output.xlsx')
工具比较
| 方法 | 优势 | 劣势 | 最适合 |
|------|------|------|--------|
| 在线工具 | 简单、无需代码 | 文件大小限制、隐私问题 | 小文件、快速任务 |
| Python Pandas | 强大、灵活 | 需要 Python | 大文件、自动化 |
| JavaScript xlsx | Node.js 集成 | 需要 Node.js | Web 应用 |
| 命令行 | 脚本化、快速 | 学习曲线 | 自动化、批处理 |
故障排除
问题:编码错误
# 解决方案:指定编码
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
df.to_excel('output.xlsx', index=False, engine='openpyxl')
问题:嵌套结构
# 使用 json_normalize
df = pd.json_normalize(data, sep='_')
问题:Excel 限制
Excel 限制:
- 最大行数:1,048,576
- 最大列数:16,384
# 检查大小
if len(df) > 1048576:
# 分割为多个文件
chunk_size = 1000000
for i, chunk in enumerate(np.array_split(df, len(df)//chunk_size + 1)):
chunk.to_excel(f'output_part_{i}.xlsx', index=False)
结论
在 JSON 和 Excel 之间转换数据对于数据分析和协作至关重要。通过掌握这些工具和技术,您可以:
- ✅ 快速转换小文件(在线工具)
- ✅ 自动化大规模转换(Python/JavaScript)
- ✅ 处理复杂的嵌套结构
- ✅ 保持数据完整性
- ✅ 为不同受众格式化数据
推荐
快速一次性转换:→ 使用在线工具(Big JSON Viewer)
自动化/脚本:→ 使用 Python Pandas
Web 应用:→ 使用 JavaScript xlsx
批处理:→ 使用命令行工具
选择最适合您需求的方法,并始终在敏感数据时考虑隐私和安全性!