python中将json数据结构转化为excel表格
文件数据
文件名: json.txt 数据类型:列表嵌套字典 例如下面👇
[
{"name":"23675-用户增长产品经理(北京)",
"csategory":"产品/项日类",
"count":"1",
"loaction":"一北京",
"tiem":"2018-08-06",
},
{
"name":"23675-用户增长产品经理(北京)",
"category":"产品/项日类",
"count":"1",
"loaction":"一北京",
"tiem":"2018-08-06"
},
{
"name":"23675-用户增长产品经理(北京)",
"category":"产品/项日类",
"count":"1",
"loaction":"一北京",
"tiem":"2018-08-06"},
{
"name":"23675-用户增长产品经理(北京)",
"category":"产品/项日类",
"count":"1",
"loaction":"一北京",
"tiem":"2018-08-06"
}
]
报错问题总结
JSONDecodeError: 一般为json格式错误json在线解析和格式校验keyerror: 这种错误没复现。如果有这种错误,把文件数据发出来,再瞅瞅
两种形式转换为excel
一、直接写入到excel
前提需要安装 tablib命令: pip install tablib[all]
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import json
import tablib
# json.text文件的格式: [{"a":1},{"a":2},{"a":3},{"a":4},{"a":5}]
# 获取json数据
with open('json.txt', 'r') as f:
rows = json.load(f)
# 将json中的key作为header, 也可以自定义header(列名)
header=tuple([ i for i in rows[0].keys()])
data = []
# 循环里面的字典,将value作为数据写入进去
for row in rows:
body = []
for v in row.values():
body.append(v)
data.append(tuple(body))
data = tablib.Dataset(*data,headers=header)
open('data.xls', 'wb').write(data.xls)
二、先通过csv模块将json数据类型转化为csv格式,再导入表格
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import csv
# 获取json数据
import json
with open('json.txt', 'r') as f:
rows = json.load(f)
# 创建文件对象
f = open('data.csv', 'w')
# 通过文件创建csv对象
csv_write = csv.writer(f)
# writerow: 按行写入, writerows: 是批量写入
# 写入数据 取列表的第一行字典,用字典的key值做为头行数据
csv_write.writerow(rows[0].keys())
# 循环里面的字典,将value作为数据写入进去
for row in rows:
csv_write.writerow(row.values())
# 关闭打开的文件
f.close()
这是csv格式数据,以逗号分隔
![这里写图片描述](https://img-blog.csdn.net/20180807200528363?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dsbGF4cQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
先新建excel表格
![这里写图片描述](https://img-blog.csdn.net/20180807194232907?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dsbGF4cQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
找到数据里面的自文本,导入上面的csv格式文件 选择逗号分隔,下面是数据预览,没问题就可以点下一步了 按照上面不走来即可,就可以看到数据已经转为表格形式了。 ![这里写图片描述](https://img-blog.csdn.net/20180807201356982?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dsbGF4cQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
|