json模块是python内置的用于序列化的模块。
序列化和反序列化
序列化就是将python类型的数据结构转换为json格式的数据结构。转换成json结构一般是为了将数据传递给前端时的一种做法。这样的操作就叫做序列化。
反之,前端发送一个json格式的数据结构在后端被转换成python的数据结构的操作,叫做反序列化。
json.dump(obj, fp)
json.dump()会将obj对象序列化,并存入fp中。
obj即为python的数据结构(不支持set)。
fp为file对象,比如open('file_path', 'w')
import json
d = {
"str": "ajdklsajldjs",
"number": 7897,
"list": ['abt', 'bef', 84973],
"tuple": (1, 2, 3),
# "set": {6, 7, 8},
"dict": {'a': 1, 'b': 2}
}
json_d = json.dump(d, fp=open('my.json', 'w'))
上面的代码会将字典d写入当前目录下的my.json文件中,格式和d一样。
json.dump()函数的返回值为None。
json.dumps(obj)
json.dumps()函数和json.dump()函数功能一样,但是区别在于dumps()函数返回一个json字符串,而非写入文件。
import json
d = {
"str": "ajdklsajldjs",
"number": 7897,
"list": ['abt', 'bef', 84973],
"tuple": (1, 2, 3),
# "set": {6, 7, 8},
"dict": {'a': 1, 'b': 2}
}
json_d = json.dumps(d)
print(type(json_d))
print(json_d)
json.loads()
用于将json字符串反序列化为python数据结构。
import json
d = {
"str": "ajdklsajldjs",
"number": 7897,
"list": ['abt', 'bef', 84973],
"tuple": (1, 2, 3),
# "set": {6, 7, 8},
"dict": {'a': 1, 'b': 2}
}
json_d = json.dumps(d)
return_d = json.loads(json_d)
print(type(return_d))
print(return_d)
json.load(fp)
从.json文件中读取数据到python中, 参数fp是一个file对象,比如open('file_path', 'r')。
import json
from_json = json.load(open('my.json', 'r'))
print(type(from_json))
print(from_json)
格式化输出json字符串
有时,我们的json字符串可能会很长,所以,我们可以使用pprint()函数来格式化json字符串。
pprint(json_str)
合理使用indent参数
json.dumps(obj, indent=4)
注意:set是无法被序列化的
暂时不知道为什么无法被序列化?如果你知道的话可以在评论区评论,谢谢。