跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python

Python 实现 JSON 转 CSV:基础与嵌套数据处理

综述由AI生成介绍如何使用 Python 结合 Free Spire.XLS 库将 JSON 数据转换为 CSV 格式。涵盖环境配置、简单 JSON 数组转换及嵌套字典扁平化处理。通过解析 JSON 文件,提取表头,利用工作簿写入数据并保存为 UTF-8 编码的 CSV 文件。解决了中文乱码及特殊字符导致的格式错乱问题,适用于数据分析与 Excel 工作流集成场景。

灰度发布发布于 2026/3/30更新于 2026/5/2437 浏览
Python 实现 JSON 转 CSV:基础与嵌套数据处理

JSON(JavaScript Object Notation)和 CSV(Comma-Separated Values)是数据交换和存储中最常用的两种格式。JSON 以其灵活的结构化表示方式广泛应用于 API 接口、配置文件等场景,而 CSV 则因其简洁的表格形式在数据分析、电子表格处理和数据库导入导出中占据主导地位。在实际工作中,我们经常需要将 JSON 数据转换为 CSV 格式,以便利用 Excel、Pandas 等工具进行进一步分析或可视化。

本文将详细介绍如何使用 Python 结合 Free Spire.XLS 库将 JSON 数据转换为 CSV 文件,涵盖环境配置、基本转换、嵌套数据处理以及常见问题的解决方案。

1. 环境准备

在开始之前,请确保您的 Python 环境已安装以下依赖:

  • Python 3.6 或更高版本
  • Free Spire.XLS for Python 库

使用 pip 安装 Free Spire.XLS:

pip install Spire.XLS.Free 

此外,我们还将使用 Python 标准库中的 json 模块处理 JSON 数据(无需额外安装)。

2. 核心实现:将 JSON 数据转换为 CSV 文件

2.1 基础场景:简单 JSON 转 CSV

简单 JSON 指无嵌套、键值对结构统一的 JSON 数组(如 [{"name":"张三","age":25}, ...]),是最基础的转换场景。

实现逻辑:

  1. 读取并解析 JSON 文件为 Python 列表;
  2. 提取所有唯一键作为 CSV 表头;
  3. 初始化 Workbook/Worksheet 对象,写入表头和数据;
  4. 保存为 CSV 格式并释放资源。

完整代码:

import json
from spire.xls import *
from spire.xls.common import *

def simple_json_to_csv(json_path: str, csv_path: str) -> None:
    """ 简单结构 JSON 转 CSV(无嵌套)
    :param json_path: 输入 JSON 文件路径
    :param csv_path: 输出 CSV 文件路径
    """
    try:
        # 1. 读取并解析 JSON 数据
        with open(json_path, 'r', encoding='utf-8') as f:
            json_data = json.load(f)
        
        # 校验数据格式(必须是包含字典的列表)
        if not isinstance(json_data, )   ((item, )  item  json_data):
             ValueError()
        
        
        headers = []
         item  json_data:
             key  item.keys():
                 key   headers:
                    headers.append(key)
        
        
        workbook = Workbook()
        worksheet = workbook.Worksheets[]
        
        
         col_idx, header  (headers, start=):
            worksheet.Range[, col_idx].Text = header
        
        
         row_idx, item  (json_data, start=):
             col_idx, header  (headers, start=):
                
                cell_value = item.get(header, )
                worksheet.Range[row_idx, col_idx].Text = (cell_value)
        
        
        worksheet.SaveToFile(csv_path, , Encoding.get_UTF8())
        workbook.Dispose()
        ()
     Exception  e:
        ()


 __name__ == :
    
    
    simple_json_to_csv(, )
list
or
not
all
isinstance
dict
for
in
raise
"JSON 数据需为「包含字典的列表」格式"
# 2. 提取表头(去重)
for
in
for
in
if
not
in
# 3. 初始化 Excel 工作簿和工作表
0
# 4. 写入表头(第一行)
for
in
enumerate
1
1
# 5. 写入数据行(从第二行开始)
for
in
enumerate
2
for
in
enumerate
1
# 处理空值,避免 KeyError
""
str
# 6. 保存为 CSV 并释放资源
","
print
f"转换完成!CSV 文件路径:{csv_path}"
except
as
print
f"转换失败:{str(e)}"
# 测试调用
if
"__main__"
# 示例 test.json 内容:
# [{"name":"张三","age":25,"city":"北京"},{"name":"李四","age":30,"city":"上海"}]
"test.json"
"simple_result.csv"

关键代码解释:

  • json.load():将 JSON 文件解析为 Python 原生数据结构(列表/字典);
  • worksheet.Range[row, col]:Free Spire.XLS 的单元格定位方式,行/列从 1 开始计数;
  • Dispose():释放 Workbook 占用的内存资源,避免内存泄漏。
2.2 进阶场景:嵌套 JSON 转 CSV

实际业务中 JSON 常包含嵌套结构(如 {"name":"张三","info":{"age":25,"city":"北京"}}),直接转换会丢失嵌套数据,需先将嵌套字典'扁平化'。

实现逻辑:

  1. 编写递归函数扁平化嵌套字典;
  2. 解析 JSON 并应用扁平化处理;
  3. 后续步骤同基础场景。

完整代码:

import json
from spire.xls import *
from spire.xls.common import *

def flatten_dict(nested_dict: dict, parent_key: str = '', sep: str = '_') -> dict:
    """ 递归扁平化嵌套字典
    :param nested_dict: 待扁平化的嵌套字典
    :param parent_key: 父键名(递归使用)
    :param sep: 键名分隔符(如 info_age)
    :return: 扁平化后的单层字典
    """
    items = []
    for k, v in nested_dict.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).items())
        else:
            items.append((new_key, v))
    return dict(items)

def nested_json_to_csv(json_path: str, csv_path: str) -> None:
    """ 嵌套结构 JSON 转 CSV
    :param json_path: 输入 JSON 文件路径
    :param csv_path: 输出 CSV 文件路径
    """
    try:
        # 1. 读取并解析 JSON
        with open(json_path, 'r', encoding='utf-8') as f:
            json_data = json.load(f)
        
        # 2. 扁平化所有嵌套字典
        flattened_data = []
        for item in json_data:
            flattened_item = flatten_dict(item)
            flattened_data.append(flattened_item)
        
        # 3. 提取表头(扁平化后的键)
        headers = []
        for item in flattened_data:
            for key in item.keys():
                if key not in headers:
                    headers.append(key)
        
        # 4. 初始化工作簿并写入数据(同基础场景)
        workbook = Workbook()
        worksheet = workbook.Worksheets[0]
        
        # 写入表头
        for col_idx, header in enumerate(headers, start=1):
            worksheet.Range[1, col_idx].Text = header
        
        # 写入扁平化数据
        for row_idx, item in enumerate(flattened_data, start=2):
            for col_idx, header in enumerate(headers, start=1):
                cell_value = item.get(header, "")
                worksheet.Range[row_idx, col_idx].Text = str(cell_value)
        
        # 保存并释放资源
        worksheet.SaveToFile(csv_path, ",", Encoding.get_UTF8())
        workbook.Dispose()
        print(f"嵌套 JSON 转换完成!CSV 文件路径:{csv_path}")
    except Exception as e:
        print(f"转换失败:{str(e)}")

# 测试调用
if __name__ == "__main__":
    # 示例 nested_test.json 内容:
    # [{"name":"张三","info":{"age":25,"job":{"title":"工程师"}}},{"name":"李四","info":{"age":30,"job":{"title":"产品经理"}}}]
    nested_json_to_csv("nested_test.json", "nested_result.csv")

关键代码解释:

  • flatten_dict:核心递归函数,将嵌套键拼接为单层(如 info_job_title),解决嵌套数据丢失问题;
  • 扁平化后的数据处理逻辑与基础场景一致,保证 CSV 结构规整。

3. 常见问题与解决方案

3.1 中文乱码问题
  • 现象:CSV 文件用 Excel 打开后中文显示乱码;
  • 解决方案:转换时指定了 UTF-8 编码,若 Excel 兼容问题,可将 CSV 用记事本打开,'另存为'选择'UTF-8-BOM'编码。
3.2 特殊字符导致格式错乱
  • 现象:换行符、制表符导致 CSV 单元格错位;

解决方案:写入前转义特殊字符:

cell_value = str(cell_value).replace('\n', ' ').replace('\r', ' ').replace('\t', ' ')

4. 总结

通过结合 Python 的 json 模块进行数据解析,并利用 Free Spire.XLS 强大的工作表操作能力,我们可以灵活地处理嵌套结构、自定义扁平化策略,并最终生成符合预期的 CSV 文件。该方法特别适合需要与 Excel 工作流紧密结合的场景,或者当需要在同一个项目中同时处理 Excel 和 CSV 格式时。

目录

  1. 1. 环境准备
  2. 2. 核心实现:将 JSON 数据转换为 CSV 文件
  3. 2.1 基础场景:简单 JSON 转 CSV
  4. 测试调用
  5. 2.2 进阶场景:嵌套 JSON 转 CSV
  6. 测试调用
  7. 3. 常见问题与解决方案
  8. 3.1 中文乱码问题
  9. 3.2 特殊字符导致格式错乱
  10. 4. 总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大型语言模型 (LLM) 入门与训练实战指南
  • 美团大模型应用算法工程师岗位职责与技术栈详解
  • Python 安装教程:Windows 系统最佳实践
  • FLOAT:基于流匹配的音频驱动说话者头像生成模型
  • 在线图书借阅平台的设计与实现
  • 三个 Python 爱心表白代码示例
  • LLM 大模型产品经理学习指南:从基础理论到实战应用
  • Java 八种基本数据类型包装类及装箱拆箱详解
  • Windows 系统下如何更新 npm 及 Node.js 至最新版本
  • 基于 OpenClaw 与飞书开放平台的 AI 新闻推送机器人搭建指南
  • GitHub Copilot 中配置与使用 MCP 服务指南
  • 基于 Rust 与 GLM-5 的高性能 AI 翻译 CLI 工具实现
  • AI Agent 行业研究报告:技术演进与应用前景
  • Git-RSCLIP 镜像免配置部署:解决环境冲突问题
  • 大模型技术原理与工程化应用实践指南
  • 宇树机器人 G1 二次开发:FAST-LIO 建图配置与 RViz 可视化
  • Figma设计稿转前端代码:基于Cursor IDE MCP功能的自动化方案
  • 基于 Java 的家庭药品管理系统设计与实现
  • OpenClaw:开源 AI 智能体框架架构、部署与安全分析
  • openGauss 向量数据库能力与 RAG 应用场景解析

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online