找回密码
 立即注册
首页 业界区 业界 【Python 教程】如何将 JSON 数据转换为 Excel 工作表 ...

【Python 教程】如何将 JSON 数据转换为 Excel 工作表

硫辨姥 4 小时前
在数据处理场景中,JSON 作为轻量级数据交换格式被广泛使用,而 Excel 则是业务分析、数据交付的核心载体。将 JSON 数据结构化转换为 Excel 文件,是日常开发中高频且基础的需求。本文将介绍如何使用免费库 Free Spire.XLS for Python 完成这一转换任务,并提供处理复杂嵌套数据的实用方案。
一、环境准备

1.1 安装依赖

在开始编码之前,需要安装必要的库。Free Spire.XLS for Python 是一个独立的 Excel 操作库,无需本地安装 Microsoft Office 即可创建和编辑 Excel 文件。通过 pip 安装非常简单:
  1. pip install Spire.XLS.Free
复制代码
安装完成后,无需额外配置,即可在代码中引入并使用核心类库。
1.2 数据准备

本文以典型的结构化JSON数据为例(用户信息列表),示例JSON如下:
  1. [
  2.     {
  3.         "id": 1001,
  4.         "name": "张三",
  5.         "age": 28,
  6.         "email": "zhangsan@example.com",
  7.         "is_active": true
  8.     },
  9.     {
  10.         "id": 1002,
  11.         "name": "李四",
  12.         "age": 32,
  13.         "email": "lisi@example.com",
  14.         "is_active": false
  15.     },
  16.     {
  17.         "id": 1003,
  18.         "name": "王五",
  19.         "age": 25,
  20.         "email": "wangwu@example.com",
  21.         "is_active": true
  22.     }
  23. ]
复制代码
二、基础实现:JSON 转 Excel 核心流程

核心思路为:解析 JSON 数据 → 创建 Excel 工作簿/工作表 → 写入表头与数据 → 保存文件。以下是完整实现代码:
  1. import json
  2. from spire.xls import *
  3. from spire.xls.common import *
  4. def json_to_excel_basic(json_data, output_path):
  5.     # 1. 初始化Excel工作簿
  6.     workbook = Workbook()
  7.     # 移除默认工作表,创建新工作表
  8.     workbook.Worksheets.Clear()
  9.     worksheet = workbook.Worksheets.Add("用户数据")
  10.     # 2. 解析JSON数据(若为文件读取,可替换为json.load(open("data.json", "r", encoding="utf-8")))
  11.     data = json.loads(json_data)
  12.     if not data:
  13.         raise ValueError("JSON数据为空,无法转换")
  14.     # 3. 写入表头(取第一条数据的键作为表头)
  15.     headers = list(data[0].keys())
  16.     for col_idx, header in enumerate(headers):
  17.         worksheet.Range[1, col_idx + 1].Text = header
  18.     # 4. 写入数据行
  19.     for row_idx, item in enumerate(data, start=2):  # 从第2行开始写入数据
  20.         for col_idx, key in enumerate(headers):
  21.             value = item.get(key, "")
  22.             worksheet.Range[row_idx, col_idx + 1].Text = str(value)
  23.     # 5. 自动调整列宽
  24.     worksheet.AllocatedRange.AutoFitColumns()
  25.     # 6. 保存Excel文件
  26.     workbook.SaveToFile(output_path, ExcelVersion.Version2016)
  27.     workbook.Dispose()  # 释放资源
  28. # 测试调用
  29. if __name__ == "__main__":
  30.     # 示例JSON字符串(实际场景可从文件/接口读取)
  31.     json_str = '''
  32.     [
  33.         {"id": 1001, "name": "张三", "age": 28, "email": "zhangsan@example.com", "is_active": true},
  34.         {"id": 1002, "name": "李四", "age": 32, "email": "lisi@example.com", "is_active": false},
  35.         {"id": 1003, "name": "王五", "age": 25, "email": "wangwu@example.com", "is_active": true}
  36.     ]
  37.     '''
  38.     try:
  39.         json_to_excel_basic(json_str, "基础版JSON转Excel.xlsx")
  40.         print("转换完成!")
  41.     except Exception as e:
  42.         print(f"转换失败:{e}")
复制代码
关键代码解析


  • 工作簿初始化:Workbook() 创建空工作簿,Worksheets.Clear() 移除默认工作表,避免冗余;
  • 数据解析:使用 Python 内置 json 模块解析数据,兼容字符串/文件两种输入方式;
  • 表头与数据写入: 提取第一条 JSON 数据的键作为 Excel 表头,使用 item.get(key, "") 避免键缺失报错,统一转换为字符串写入(Text 属性),适配布尔、数字、字符串等不同数据类型。
  • 资源释放:Dispose() 方法释放工作簿占用的内存,尤其适合批量转换场景。
三、进阶优化:提升转换质量与健壮性

基础版本满足核心需求,但实际场景中需处理嵌套JSON、样式美化等问题,以下是优化方案。
3.1 处理嵌套 JSON 数据

针对包含嵌套结构的JSON(如用户地址信息),需扁平化处理后写入Excel:
  1. import json
  2. from spire.xls import *
  3. from spire.xls.common import *
  4. def flatten_dict(d, parent_key='', sep='_'):
  5.     """递归扁平化嵌套字典"""
  6.     items = []
  7.     for k, v in d.items():
  8.         new_key = f"{parent_key}{sep}{k}" if parent_key else k
  9.         if isinstance(v, dict):
  10.             items.extend(flatten_dict(v, new_key, sep=sep).items())
  11.         else:
  12.             items.append((new_key, v))
  13.     return dict(items)
  14. def json_to_excel_nested(json_data, output_path):
  15.     workbook = Workbook()
  16.     workbook.Worksheets.Clear()
  17.     worksheet = workbook.Worksheets.Add("嵌套JSON数据")
  18.     data = json.loads(json_data)
  19.     if not data:
  20.         raise ValueError("JSON数据为空")
  21.     # 扁平化所有数据,提取完整表头
  22.     flattened_data = [flatten_dict(item) for item in data]
  23.     headers = list(flattened_data[0].keys())
  24.     # 写入表头
  25.     for col_idx, header in enumerate(headers):
  26.         worksheet.Range[1, col_idx + 1].Text = header
  27.     # 写入扁平化后的数据
  28.     for row_idx, item in enumerate(flattened_data, start=2):
  29.         for col_idx, key in enumerate(headers):
  30.             worksheet.Range[row_idx, col_idx + 1].Text = str(item.get(key, ""))
  31.     # 自动列宽
  32.     worksheet.AllocatedRange.AutoFitColumns()
  33.     # 保存文件
  34.     workbook.SaveToFile(output_path, ExcelVersion.Version2016)
  35.     workbook.Dispose()
  36. # 测试嵌套JSON转换
  37. if __name__ == "__main__":
  38.     nested_json = '''
  39.     [
  40.         {
  41.             "id": 1001,
  42.             "name": "张三",
  43.             "age": 28,
  44.             "contact": {
  45.                 "email": "zhangsan@example.com",
  46.                 "phone": "13800138000"
  47.             },
  48.             "address": {
  49.                 "province": "北京",
  50.                 "city": "北京市"
  51.             }
  52.         },
  53.         {
  54.             "id": 1002,
  55.             "name": "李四",
  56.             "age": 32,
  57.             "contact": {
  58.                 "email": "lisi@example.com",
  59.                 "phone": "13900139000"
  60.             },
  61.             "address": {
  62.                 "province": "上海",
  63.                 "city": "上海市"
  64.             }
  65.         }
  66.     ]
  67.     '''
  68.     try:
  69.         json_to_excel_nested(nested_json, "嵌套JSON转Excel.xlsx")
  70.         print("嵌套JSON转换完成!")
  71.     except Exception as e:
  72.         print(f"转换失败:{e}")
复制代码
3.2 美化 Excel 样式(表头高亮、字体设置)

为提升Excel可读性,可对表头设置样式:
  1. # 在写入表头后添加样式设置代码
  2. header_range = worksheet.Range[1, 1, 1, len(headers)]
  3. # 设置表头背景色
  4. header_range.Style.Color = Color.get_SkyBlue()
  5. # 设置表头字体加粗
  6. header_range.Style.Font.IsBold = True
  7. # 设置表头文字居中
  8. 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 项目中,适用于数据导出、报表生成等常见业务场景。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册