序列化和反序列化
json序列化
序列化:把python的基本数据类型转化为字符串,通过json.dumps来实现
1 import json 2 dic={'k1':'v1'} 3 print(dic,type(dic)) 4 result=json.dumps(dic) #把字典转化为字符串 5 print(result,type(result))
1 输出: 2 {'k1': 'v1'} <class 'dict'> 3 {"k1": "v1"} <class 'str'>
反序列化:把python的字符串转化为python的基本数据类型,通过json.loads来实现。反序列化时要使用双引号
1 import json 2 s1='{"k1":123}' #类似于一个字典的字符串,注意k1要使用双引号 3 print(s1,type(s1)) 4 s2=json.loads(s1) #反序列化为一个真正的字典 5 print(s2,type(s2)) 6 输出 7 {"k1":123} <class 'str'> 8 {'k1': 123} <class 'dict'>
序列化的应用:当我们发送一个http请求给某网站时时,会返回给我们一个字符串。为了取值方便,我们通常把字符串转化为Python某个数据类型。json可以跨语言
1 通过json来获取天气指数 2 import requests #用于发送http请求 3 import json 4 response = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=北京') #通过requests发起一个请求,得到一个返回值给response 5 print(type(response.text)) #response.text是一个类似于数据字典的字符串,记录着北京的天气 6 response.encoding='utf-8' 7 dic=json.loads(response.text) #把response.text反序列化为一个字典,方便我们取值 8 print(type(dic))
json.dump和json.load? ,相对于json.dumps和json.loads多了一些操作。
json.dump多了一步写操作
1 import json 2 s1=[1,2,3] 3 json.dump(s1,open("db1",'w')) #做了两步操作,首先把列表s1转化为字符串(如果没有这一步的话列表是不能直接写入文件中的) ,然后写入文件db1中
json.load多了一步读操作
1 import json 2 s2=json.load(open("db1","r"))#同样做了两步操作,首先读出文件db1中的字符串,然后将其转化为python某一数据类型 3 print(s2,type(s2))
另外一种序列化pickle,只适用于python语言
1 import pickle 2 li=[1,2,3] 3 r=pickle.dumps(li) #转化为python特有的字节 4 print(r,type(r)) 5 输出 6 b'\x80\x03]q\x00(K\x01K\x02K\x03e.' <class 'bytes'>
s=pickle.loads(r) #反序列化 print(s,type(s)) 输出: [1, 2, 3] <class 'list'>
pickle.dump,pickle.load类似于json.dump,json.load
总结:json和pickle的区别?
json可以支持多种语言,但是只支持在python中str,list,tuple,dict,int,True,False,float等数据类型
pickle只支持python,但是支持更多的数据类型,复杂的数据类型。
注意:python不同版本之间的序列化可能会出现问题

浙公网安备 33010602011771号