Json In Python

玩数据的时候,免不了与json接触。这两天在玩漫威的API,采集数据和存储数据时,因为我没有MongoDB数据库,免不了要将Json(dict)数据格式保存,再将其转换成python的各种数据格式:dataframe或dict等。在此记录几个场景,和解决办法:

Json单条举例:多dict嵌套,模拟实际接触到的数据类型
1
dct = {'aaa': 'bbb', 'ccc': {'ff': 'gg', 'dd': 'ee', 'hh': {'i': 'j'}}}
CASE 1:逐条获得dict数据时,(逐条)写进data1.json
1
2
3
4
5
6
7
8
9
10
# 对 Marvel API请求数据时,是逐条获取dict的,此处‘dct’表示逐条获取的内容

dct = {'aaa': 'bbb', 'ccc': {'ff': 'gg', 'dd': 'ee', 'hh': {'i': 'j'}}}

with open(r'data1.json','w') as file: # 新建 data1.json文件
for i in [1,2,3,4]: # [1,2,3,4]这里写4条,只做示范
js = json.dumps(dct) # 将python格式的dict编码成json需要的格式
file.write(js) # 逐条写入
file.write('\n') # 逐条换行写入
file.close()
CASE 2:(逐条)读取data1.json里的内容
1
2
3
4
5
6
7
8
9
10
# data1.json 里的逐条内容都是以 str 形式存储的
# 相当于要将 str(='dict') 转换成 dict

import ast

ff = open(r'data1.json','r')
for q in ff:
q = ast.literal_eval(q)
print(q) # 这里的q已经是python的dict格式,可以按key取value
ff.close()

这里我尝试了各种 json.load, pd.read_json都没有成功,最后用ast一步解决。

CASE 3:逐条获得dict数据时,(逐条)对dict进行变换再写进data2.json
1
2
3
4
5
6
7
8
9
10
# 有时需要对获取的dict数据再作处理再保存

dct = {'aaa': 'bbb', 'ccc': {'ff': 'gg', 'dd': 'ee', 'hh': {'i': 'j'}}}

with open(r'data2.json','w') as file: # 新建 data2.json文件
for i in [1,2,3,4]: # [1,2,3,4]这里写4条,只做示范
js = json.dumps({str(i): dct})
file.write(js) # 逐条写入
file.write('\n') # 逐条换行写入
file.close()
CASE 4:对data2.json的json文件进行内容读取
1
2
3
4
5
6
7
8
# 此时用ast却报错了,因此换 yaml
import yaml

ff = open(r'data2.json', 'r')
for q2 in ff:
q2 = yaml.load(q2)
print(q2) # 这里的q2已经是python的dict格式,可以按key取value
ff.close()
would you buy me a coffee☕~
0%