json库常用有4个方法,分别是 dump、dumps、load、loads。
其中 dump和 dumps是用来把字典和数组转换为 json格式的,dump把转换结果直接写入文件,dumps返回字符串。
load和 loads是把 json格式的数据转换为字典格式,load直接从 json文件中读取数据并返回字典对象,loads把字符串形式的 json数据转换成字典格式。
'''json的序列化与反序列化
json格式的字符串类型
json序列化:把python的数据类型转换为json的字符串
json反序列化:把json的字符串转换为python的数据类型
'''
'''字典的序列化与反序列化'''
# 字典的序列化
import json
dict1 = {'name': 'AI', 'age': 18, 'address': 'beijing'} # 注意:字典类型中,键值都是单引号,而json格式,是双引号
new = json.dumps(dict1)
print(new, type(new))
# 运行结果如下:
# {"name": "AI", "age": 18, "address": "beijing"} <class 'str'>
# 字典的反序列化
newdict = json.loads(new)
print(newdict, type(newdict))
# 运行结果如下:
# {'name': 'AI', 'age': 18, 'address': 'beijing'} <class 'dict'>
'''列表的序列化与反序列化'''
# 列表的序列化
list1 = ["aa", "bb", "cc"]
list_str = json.dumps(list1)
print(list_str, type(list_str))
# 运行结果如下:
# ["aa", "bb", "cc"] <class 'str'>
# 列表的反序列化
newlist = json.loads(list_str)
print(newlist, type(newlist))
# 运行结果如下:
# ['aa', 'bb', 'cc'] <class 'list'>
'''元组的序列化与反序列化'''
# 元组的序列化
tuple1 = ("aaa", "bbb", "ccc")
tuple_str = json.dumps(tuple1)
print(tuple_str, type(tuple_str))
# 运行结果如下:
# ["aaa", "bbb", "ccc"] <class 'str'>
# 元组的反序列化
newtuple = json.loads(tuple_str)
print(newtuple, type(newtuple))
# 运行结果如下:
# ['aaa', 'bbb', 'ccc'] <class 'list'> # 此处需要注意:元组的反序列化结果类型是列表,而非元组
'''文件的序列化与反序列化: 此过程也可理解为,文件序列化是把内容写进json文件中,读取的时候进行反序列化'''
import json
accounts={10: {'name': 'AI', 'age': 18, 'address': 'beijing'}} # 原始数据
def json_file():
with open('info.json', 'w') as f1:
f1.write(json.dumps(accounts)) # 写入时对文件进行序列化
with open('info.json', 'r') as f2:
type_json = json.load(f2) # 读取时对文件进行反序列化
print("反序列化后的内容:", type_json, "类型:", type(type_json))
type_json['sex'] = 'boy' # 对文件内容进行更改
json.dump(type_json, open('info.json', 'w')) # 修改后的内容写入到json格式的文件中
if __name__ == '__main__':
json_file()
# 查看json文件内容显示如下:
# {"10": {"name": "AI", "age": 18, "address": "beijing"}, "sex": "boy"}