先放结果:
json.loads()解码python json格式
json.load()加载python json格式文件——加载时必须有相应的json文件,否则无法加载。
关于json文件读写操作时,常用方法就是dump,dumps;load和loads。
首先理解,json文件内容读取后是str类型。
input:
with open("abc.json", 'r') as jr:
print(type(jr))
output:
dump和dumps使用时,是将字典型dict的结果转换成字符串型str,进而保存到json文件中。(直接将字典写入json文件会报错,必须使用dumps/dump)
#!/usr/bin/python3
import json
data = { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 }
json = json.dumps(data)
print(json)
print(type(json))
print(data)
print(type(data))
执行结果:
'{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}'
{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}
dump可以追加字典加入json文件
import json
# json.dump()函数的使用,将json信息写进文件
json_info = "{'a': '1'}"
file = open('123.json','w',encoding='utf-8')
json.dump(json_info,file)
在数据挖掘预处理过程中,会频繁使用到读取json原始数据文件。
loads可以将json字符串类型转换成字典型dict,方便调取需要的key对应的value值。
with open('abc.txt', 'r') as jr:
d = json.loads(jr)
print(d["id"]) #可以当字典使用
loads可以读取任意文件形式的符合json格式的字符串str类型,读后转换字典。
上面步骤无法使用load方法转换,报错情况:
AttributeError: 'str' object has no attribute 'read'
Process finished with exit code 1
使用load方法时,不仅要求json格式str类型,还要求读入文件为标准的json文件。即便将上述非json文件的str串loads操作,再dumps后操作依然报错。
with open("abc.txt", 'r') as l:
print(type(l))
d = json.loads(l)
print(type(d))
j = json.dumps(d)
print(type(j))
print(json.load(j))
报错情况:
Traceback (most recent call last):
File "C:/dev/PyCharmProjects/data_preprocess.py", line 59, in
print(json.load(j))
File "C:\dev\Anaconda3\lib\json\__init__.py", line 293, in load
return loads(fp.read(),
AttributeError: 'str' object has no attribute 'read'
Process finished with exit code 1
通过把上述原始数据文件loads+dumps+保存json文件,这个展示形式,清楚展示load的使用要求:
fw = open('../test.csv', 'w')
# abc.txt包含很多行json字符串,但整体非json格式文件
for l in open('abc.txt', 'r'):
print(type(l))
d = json.loads(l)
print(type(d))
j = json.dumps(d)
print(type(j))
fw.write(j)
fw.close()
with open('../test.csv', 'r') as fr:
print(type(json.load(fr)))
print(json.load(fr)["id"])
运行成功!!!