背景

最近工作上遇到个问题,用postman查询数据,得到的响应数据是json格式的,
查看的时候非常不方便,于是想要写个小工具用程序把json文件转换为excel文件

查阅资料

python中的pandas库正好可以实现这个功能,以下是具体实现步骤:

1、在cmd中用pip安装pandas库

# 安装pandas库,用清华源安装会下载的快很多
pip insatll pandas -i https://pypi.tuna.tsinghua,edu,cn/simple

使用pip show pandas查看是否安装成功,如下图就是安装成功了

pip show pandas

在这里插入图片描述

2、接下来就是用python代码简单实现

test_data.json文件如下:

{
  "code" : "00000",
  "msg" : "success",
  "timestamp" : 1722655966232,
  "data" : [
    {
    "title" : "你好",
    "time" : "2024-07-19 15:34:36.000"
    }
  			]
}

case.py如下:

# 导入模块
import pandas as pd
import json

# 定义文件路径(根据需要可以用导入tkinter模块弹出窗口自由选择文件)
file_path = 'E:/PycharmProjects/to_Excel/test_data1.json'

# 读取json文件并转换为Dataframe
data = pd.read_json(file_path)

# 将Dataframe转换为excel文件
data.to_excel('output.xlsx', index=False)

看看效果:
添加index=False
pandas.to_excel()函数中,index参数默认值为True,
记得一定要定义index=False,否则就会输出每一行的行号,如下图:
index=True

如果是比较复杂的json结构(多层嵌套),如上述test_data.json文件中,还嵌套着一层字典,像这样:

{
  "code" : "00000",
  "msg" : "success",
  "timestamp" : 1722655966232,
  "data" : [
    {
    "title" : "你好",
    "time" : "2024-07-19 15:34:36.000"
    },
    {
    "title" : "你好",
    "time" : "2024-07-19 15:33:36.000"
    } 
  			]
}

我们就需要根据数据结构来具体做判断,像上述结构,如果需求是只想将title和time两个字段分别做一列输出,可以这样实现:

# 用json_load方法加载文件
with open(file_path, 'r', encoding='utf-8') as file:
    data_frame = json.load(file)
    print(data_frame['data'])
    
	# 字典推导式来将data里的数据列出
    items = [{**item} for item in data_frame['data']]
    print(items)

df = pd.DataFrame(items)

excel_file_path = 'E:/PycharmProjects/to_Excel/test_data1.xlsx'
if excel_file_path:
    df.to_excel(excel_file_path, index=False)
else:
    print('转换失败')

效果如下:
在这里插入图片描述
具体问题具体分析,如果有什么疑问,可以评论私信一起讨论~

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐