使用json模块

2019-07-21  本文已影响0人  转身丶即天涯

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)
image.png

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)
image.png

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)
image.png

格式化输出json字符串

有时,我们的json字符串可能会很长,所以,我们可以使用pprint()函数来格式化json字符串。
pprint(json_str)

合理使用indent参数

json.dumps(obj, indent=4)


image.png

注意:set是无法被序列化的

暂时不知道为什么无法被序列化?如果你知道的话可以在评论区评论,谢谢。

上一篇 下一篇

猜你喜欢

热点阅读