python怎样判断字符串可以反序列化_json 序列化和反序列化(针对python数据类型)...

序列化和反序列化

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值