Python调用json包读写中,load与loads区别分析

先放结果:

json.loads()解码python json格式
json.load()加载python json格式文件——加载时必须有相应的json文件,否则无法加载。

关于json文件读写操作时,常用方法就是dumpdumpsloadloads

首先理解,json文件内容读取后是str类型

input:
with open("abc.json", 'r') as jr:
    print(type(jr))

output:
<class 'str'>

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}'
<class 'str'>
{"a": 1, "c": 3, "b": 2, "e": 5, "d": 4}
<class 'dict'>

dump可以追加字典加入json文件

import json

# json.dump()函数的使用,将json信息写进文件
json_info = "{'a': '1'}"
file = open('123.json','w',encoding='utf-8')
json.dump(json_info,file)

这次着重分享下load和loads的用法区别:

在数据挖掘预处理过程中,会频繁使用到读取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))

报错情况:

<class 'str'>
<class 'dict'>
<class 'str'>
Traceback (most recent call last):
  File "C:/dev/PyCharmProjects/data_preprocess.py", line 59, in <module>
    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"])

运行成功!!!

结论:load使用时读取是标准json文件,loads可以读取任意类json字符串格式文件。再进行数据获取操作。

猜你喜欢

转载自blog.csdn.net/Code_King_/article/details/84820937