如何将 JSON 数据转换为 Excel 工作表
、环境准备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: zhangsanexample.com, is_active: true }, { id: 1002, name: 李四, age: 32, email: lisiexample.com, is_active: false }, { id: 1003, name: 王五, age: 25, email: wangwuexample.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, encodingutf-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, start2): # 从第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: zhangsanexample.com, is_active: true}, {id: 1002, name: 李四, age: 32, email: lisiexample.com, is_active: false}, {id: 1003, name: 王五, age: 25, email: wangwuexample.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如用户地址信息需扁平化处理后写入Excelimport 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, sepsep).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, start2): 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: zhangsanexample.com, phone: 13800138000 }, address: { province: 北京, city: 北京市 } }, { id: 1002, name: 李四, age: 32, contact: { email: lisiexample.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 起始索引