Python借助Free Spire.XLS for Python实现将JSON转换为Excel
作者:m5655bj
在数据处理场景中,JSON 作为轻量级数据交换格式被广泛使用,而 Excel 则是业务分析、数据交付的核心载体。将 JSON 数据结构化转换为 Excel 文件,是日常开发中高频且基础的需求。本文将介绍如何使用免费库 Free Spire.XLS for Python 完成这一转换任务,并提供处理复杂嵌套数据的实用方案。
一、环境准备
1.1 安装依赖
在开始编码之前,需要安装必要的库。Free Spire.XLS for Python 是一个独立的 Excel 操作库,无需本地安装 Microsoft Office 即可创建和编辑 Excel 文件。通过 pip 安装非常简单:
pip install Spire.XLS.Free
安装完成后,无需额外配置,即可在代码中引入并使用核心类库。
1.2 数据准备
本文以典型的结构化JSON数据为例(用户信息列表),示例JSON如下:
[
{
"id": 1001,
"name": "张三",
"age": 28,
"email": "zhangsan@example.com",
"is_active": true
},
{
"id": 1002,
"name": "李四",
"age": 32,
"email": "lisi@example.com",
"is_active": false
},
{
"id": 1003,
"name": "王五",
"age": 25,
"email": "wangwu@example.com",
"is_active": true
}
]二、基础实现:JSON 转 Excel 核心流程
核心思路为:解析 JSON 数据 → 创建 Excel 工作簿/工作表 → 写入表头与数据 → 保存文件。
以下是完整实现代码:
import json
from spire.xls import *
from spire.xls.common import *
def json_to_excel_basic(json_data, output_path):
# 1. 初始化Excel工作簿
workbook = Workbook()
# 移除默认工作表,创建新工作表
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("用户数据")
# 2. 解析JSON数据(若为文件读取,可替换为json.load(open("data.json", "r", encoding="utf-8")))
data = json.loads(json_data)
if not data:
raise ValueError("JSON数据为空,无法转换")
# 3. 写入表头(取第一条数据的键作为表头)
headers = list(data[0].keys())
for col_idx, header in enumerate(headers):
worksheet.Range[1, col_idx + 1].Text = header
# 4. 写入数据行
for row_idx, item in enumerate(data, start=2): # 从第2行开始写入数据
for col_idx, key in enumerate(headers):
value = item.get(key, "")
worksheet.Range[row_idx, col_idx + 1].Text = str(value)
# 5. 自动调整列宽
worksheet.AllocatedRange.AutoFitColumns()
# 6. 保存Excel文件
workbook.SaveToFile(output_path, ExcelVersion.Version2016)
workbook.Dispose() # 释放资源
# 测试调用
if __name__ == "__main__":
# 示例JSON字符串(实际场景可从文件/接口读取)
json_str = '''
[
{"id": 1001, "name": "张三", "age": 28, "email": "zhangsan@example.com", "is_active": true},
{"id": 1002, "name": "李四", "age": 32, "email": "lisi@example.com", "is_active": false},
{"id": 1003, "name": "王五", "age": 25, "email": "wangwu@example.com", "is_active": true}
]
'''
try:
json_to_excel_basic(json_str, "基础版JSON转Excel.xlsx")
print("转换完成!")
except Exception as e:
print(f"转换失败:{e}")
关键代码解析
- 工作簿初始化:Workbook() 创建空工作簿,Worksheets.Clear() 移除默认工作表,避免冗余;
- 数据解析:使用 Python 内置 json 模块解析数据,兼容字符串/文件两种输入方式;
- 表头与数据写入: 提取第一条 JSON 数据的键作为 Excel 表头,使用 item.get(key, "") 避免键缺失报错,统一转换为字符串写入(Text 属性),适配布尔、数字、字符串等不同数据类型。
- 资源释放:Dispose() 方法释放工作簿占用的内存,尤其适合批量转换场景。
三、进阶优化:提升转换质量与健壮性
基础版本满足核心需求,但实际场景中需处理嵌套JSON、样式美化等问题,以下是优化方案。
3.1 处理嵌套 JSON 数据
针对包含嵌套结构的JSON(如用户地址信息),需扁平化处理后写入Excel:
import json
from spire.xls import *
from spire.xls.common import *
def flatten_dict(d, parent_key='', sep='_'):
"""递归扁平化嵌套字典"""
items = []
for k, v in d.items():
new_key = f"{parent_key}{sep}{k}" if parent_key else k
if isinstance(v, dict):
items.extend(flatten_dict(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
def json_to_excel_nested(json_data, output_path):
workbook = Workbook()
workbook.Worksheets.Clear()
worksheet = workbook.Worksheets.Add("嵌套JSON数据")
data = json.loads(json_data)
if not data:
raise ValueError("JSON数据为空")
# 扁平化所有数据,提取完整表头
flattened_data = [flatten_dict(item) for item in data]
headers = list(flattened_data[0].keys())
# 写入表头
for col_idx, header in enumerate(headers):
worksheet.Range[1, col_idx + 1].Text = header
# 写入扁平化后的数据
for row_idx, item in enumerate(flattened_data, start=2):
for col_idx, key in enumerate(headers):
worksheet.Range[row_idx, col_idx + 1].Text = str(item.get(key, ""))
# 自动列宽
worksheet.AllocatedRange.AutoFitColumns()
# 保存文件
workbook.SaveToFile(output_path, ExcelVersion.Version2016)
workbook.Dispose()
# 测试嵌套JSON转换
if __name__ == "__main__":
nested_json = '''
[
{
"id": 1001,
"name": "张三",
"age": 28,
"contact": {
"email": "zhangsan@example.com",
"phone": "13800138000"
},
"address": {
"province": "北京",
"city": "北京市"
}
},
{
"id": 1002,
"name": "李四",
"age": 32,
"contact": {
"email": "lisi@example.com",
"phone": "13900139000"
},
"address": {
"province": "上海",
"city": "上海市"
}
}
]
'''
try:
json_to_excel_nested(nested_json, "嵌套JSON转Excel.xlsx")
print("嵌套JSON转换完成!")
except Exception as e:
print(f"转换失败:{e}")
3.2 美化 Excel 样式(表头高亮、字体设置)
为提升Excel可读性,可对表头设置样式:
# 在写入表头后添加样式设置代码 header_range = worksheet.Range[1, 1, 1, len(headers)] # 设置表头背景色 header_range.Style.Color = Color.get_SkyBlue() # 设置表头字体加粗 header_range.Style.Font.IsBold = True # 设置表头文字居中 header_range.Style.HorizontalAlignment = HorizontalAlignType.Center
四、总结
通过结合 Python 内置的 json 模块和 Free Spire.XLS for Python 库,我们可以高效地将 JSON 数据转换为结构化的 Excel 文件。核心要点如下:
- 基础流程:解析 JSON → 创建 Excel 工作簿 → 写入表头/数据 → 保存文件,关键是适配 Excel 的 1 起始索引;
- 进阶优化:通过递归扁平化处理嵌套 JSON,通过样式设置提升 Excel 可读性;
- 最佳实践:转换前校验 JSON 数据有效性,转换后调用 Dispose() 释放工作簿资源。
该方案无需依赖 Office 组件,轻量化且易于集成到 Python 项目中,适用于数据导出、报表生成等常见业务场景。
到此这篇关于Python借助Free Spire.XLS for Python实现将JSON转换为Excel的文章就介绍到这了,更多相关Python JSON转Excel内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
