在数据处理、接口对接、报表生成等场景中,JSON、CSV、Excel是三种最常用的数据格式,很多时候需要实现它们之间的互相转换。Python生态中有很多成熟的第三方库可以简化这类操作,下面会逐一介绍三种格式两两互转的具体实现方法。

前置准备
实现不同格式转换需要安装对应的第三方库,执行以下命令完成安装:
pip install pandas openpyxl
其中pandas是核心数据处理库,openpyxl用于支持Excel文件的读写操作。
JSON转CSV
JSON是接口返回的常见格式,转换为CSV后更方便做批量数据查看和后续处理。假设我们有一个存储用户信息的JSON文件,内容如下:
[
{"id": 1, "name": "张三", "age": 25, "city": "北京"},
{"id": 2, "name": "李四", "age": 28, "city": "上海"},
{"id": 3, "name": "王五", "age": 22, "city": "广州"}
]
使用pandas读取JSON后直接导出为CSV即可,代码如下:
import pandas as pd
# 读取JSON文件
json_data = pd.read_json("user.json")
# 导出为CSV文件,设置编码为utf-8-sig避免中文乱码
json_data.to_csv("user.csv", index=False, encoding="utf-8-sig")
print("JSON转CSV完成")
如果JSON数据是字符串形式,也可以先通过json.loads转换为Python对象再处理:
import json
import pandas as pd
json_str = '[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]'
data = json.loads(json_str)
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False, encoding="utf-8-sig")
CSV转JSON
CSV转JSON通常用于将本地存储的表格数据转换为接口可接收的格式,实现逻辑同样简单:
import pandas as pd
# 读取CSV文件
csv_data = pd.read_csv("user.csv")
# 转换为JSON格式,orient参数控制JSON结构,records表示列表形式
json_result = csv_data.to_json(orient="records", force_ascii=False)
# 如果需要保存到文件
with open("user_from_csv.json", "w", encoding="utf-8") as f:
f.write(json_result)
print("CSV转JSON完成")
这里force_ascii=False参数可以保证中文正常显示,不会被转义为Unicode编码。
JSON转Excel
将JSON数据转换为Excel可以方便非技术人员查看和编辑,代码如下:
import pandas as pd
# 读取JSON数据
df = pd.read_json("user.json")
# 导出为Excel文件
df.to_excel("user.xlsx", index=False, sheet_name="用户信息")
print("JSON转Excel完成")
如果需要将多个JSON数据写入同一个Excel的不同工作表,可以参考以下代码:
import pandas as pd
json_data1 = pd.read_json("user1.json")
json_data2 = pd.read_json("user2.json")
with pd.ExcelWriter("multi_sheet.xlsx") as writer:
json_data1.to_excel(writer, sheet_name="第一组用户", index=False)
json_data2.to_excel(writer, sheet_name="第二组用户", index=False)
Excel转JSON
从Excel中提取数据转换为JSON格式,常用于从线下表格提取数据对接接口:
import pandas as pd
# 读取Excel文件,默认读取第一个工作表
excel_data = pd.read_excel("user.xlsx")
# 转换为JSON
json_result = excel_data.to_json(orient="records", force_ascii=False)
# 保存到文件
with open("user_from_excel.json", "w", encoding="utf-8") as f:
f.write(json_result)
print("Excel转JSON完成")
如果Excel有多个工作表,需要指定sheet_name参数读取对应工作表的内容。
CSV转Excel
CSV转Excel的操作非常直接,代码如下:
import pandas as pd
csv_data = pd.read_csv("user.csv")
csv_data.to_excel("user_from_csv.xlsx", index=False, sheet_name="用户数据")
print("CSV转Excel完成")
Excel转CSV
将Excel转换为CSV时需要注意编码问题,避免中文乱码:
import pandas as pd
excel_data = pd.read_excel("user.xlsx")
# 导出为CSV,设置编码为utf-8-sig兼容Excel打开中文
excel_data.to_csv("user_from_excel.csv", index=False, encoding="utf-8-sig")
print("Excel转CSV完成")
转换注意事项
- 中文编码问题:导出CSV时建议使用
utf-8-sig编码,这样用Excel直接打开不会出现乱码。 - 数据类型匹配:JSON中的数字、布尔值转换为CSV或Excel时会自动适配,但如果是复杂嵌套结构的JSON,需要先做扁平化处理再转换。
- 大文件处理:如果数据量超过10万行,建议使用
chunksize参数分块读取,避免内存溢出。
以上所有代码示例都可以直接复用,只需要替换对应的文件路径即可完成对应格式的数据转换。