序列化和反序列化
1、含义:
(一般应用于json模块,还有pickle模块、shelve模块)
-------->序列化定义: 将python数据类型等内容 转化 为json格式字符串的过程就叫 序列化
可转化的python数据类型对象:(如有:字符串、元组、列表、集合不能实现转化)
2、目的:
以某一种形式来存储对象,并且对象由自己定义的形式;
将对象可传输到指定位置,且更好的维护及存储。
3、区别:
json.loads()和json.dumps()------区别-------json.load() 和json.dump()
-------->对py基础数据类型的序列化、反序列化:
json.loads()反序列化:将json格式字符串 转为 py数据类型
json.dumps()序列化:将 py数据类型 转为 json格式字符串
-------->对文件的序列化、反序列化
json.load() 读文件:读取出文件中的json字符串内容
json.dump() 写文件:以json格式写入文件
实际用法:(针对python数据类型)
下面仅仅是对dict的序列化和反序列化操作(还有其他如:list、tuple)
1、json.loads()反序列化:将json字符串形式的转化为字典类型
dic=''{'name':'a1','psw':'123'}'' #一个字符串dic_2=json.loads(dic) #反序列化操作:将dic字符串类型 转化为为字典,且用dic_2来接收结果
print(type(dic_2)) #打印查看dic_2的类型,结果可见是dict字典类型
2、json.dumps()序列化:将字典形式的转化为 str字符串类型
dic_3={'name':'a1','psw':'123'} #一个字典dic_3import jsondic_4=json.dumps(dic_3) #序列化操作:转化dic_3字典格式为 str字符串,且用dic_4来接收结果
print(type(dic_4)) #打印查看dic_4的类型,结果可见是str类型
下面是对文件序列化、反序列化。(即:文件读、写)
1、json.load() 从文件内读取json格式内容
with open('text.json','r',encoding='utf-8') as f : #读取text.json文件中的json字符串,编码为utf-8
print(json.load(f)) #打印出结果,可见为json格式的str类型内容
2、json.dump() 以json格式写入内容到文件内
content = '{"name":"anthony","sex":"man"}' #有一个字符串
with open('text.json','w',encoding='utf-8') as f: #打开text.json文件,以json格式并写入;编码utf-8
json.dump(content,f) #打印出结果,可见文件中显示内容未json格式字符串
常用:
1、如:请求一个接口时,类型:content-Type:application/ json,接口返回值为:{code:200,msg:"xxxxxxxxxxxxxx",error:" "}
那么要取出返回数据中msg的值:
#先请求一个接口r = requests.post(url = "www.xxxcxxxx", header = "xxxx", data = "xxxxxxx")
#然后打印r.textprint(r.text) print json.loads(str(r.text))['msg'] #打印时转换类型为str字符串,然后json反序列化为字典类型,这样就可实现了(否则会报错)
2、预期给出的账号和密码为一个字典类型的,但是传入参数需要为字符串类型,那么就可以json序列化操作:
{"username":"qika","password":"123456"} #给定的字典类型:账号和密码"""序列化:转化为str字符串类型,然后传入接口请求参数内"""r = requests.post(url = "www.xxxcxxxx", header = "xxxx", data = json.dumps(
{"username":"qika","password":"123456"}
))
3、如:请求一个url后,将response 返回内容写入文件
json.dump(r.content.decode("utf-8")) , open("a.json" , "w") #序列化操作:将r.content写入到a.json文件中
4、如:注册和登录时,在py当中进行注册时写入注册数据到文件,然后登录时通过读取文件的数据来判断登录与否
register: """注册时,通过以temp_file的数据格式,来写入注册数据到文件register_data中"""---------文件的写入:序列化 temp_file = username + "|" + password json.dump(temp_file,open("register_data" , "w"))def login(username,password):"""#读取文件内的注册数据,准备来判断用户输入时是否正确对应,且可以正常登录:---反序列化:将register_data中的内容读取出来(文件中内容的类型是字典),然后再强制str为字符串"""
f = str(json.load(open("register_data" , "r"))) list_1 = f.split("|") #因为上一步读取出来的数据格式字符串类型,所以这里进行分割为列表,然后好进行判断登录数据了 if list_1[0] == username and list_1[1] == password: #判断y用户输入和实际的注册数据是否一致(即,判断是否能够登录成功) return True else: return False
来源:https://www.cnblogs.com/QiKa/p/12900181.html