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_3
import json
dic_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.text
print(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