json反序列化与pickle
一、定义
序列化:将内存中的不可持久化和传输对象转换为可方便持久化和传输对象的过程。
反序列化:将可持久化和传输对象转换为不可持久化和传输对象的过程。
二、 应用场景
跨平台数据传输;
保留上一次运行程序时对对象的修改
三、模块和函数
1. json
dumps()、dump()(序列化)
loads()、load() (反序列化)
2. pickle
dumps()、dump()(序列化)
loads()、load ()(反序列化)
四、案例
序列化 info={"name":"kezi","age":22} f=open("test.text","w") f.write(str(info)) f.close() 反序列 info={"name":"kezi","age":22} f=open("test.text","r") data=eval(f.read()) f.close() print (data[‘age‘]) 打印结果 22 json 简单用法 import json info={"name":"kezi","age":22} f=open("test.text","w") print(json.dumps(info)) f.write(json.dumps(info)) #f.write(str(info)) f.close() 打印结果 {"age": 22, "name": "kezi"} import json f=open("test.text","r") #data=eval(f.read()) data=json.loads(f.read()) f.close() print (data[‘age‘]) 打印结果 22 序列化 pickle import pickle def si(name): print("helle",name) info={"name":"kezi","age":22,"func":si} f=open("test.text","wb") print(pickle.dumps(info)) f.write(pickle.dumps(info)) #f.write(str(info)) f.close() 打印结果 b‘\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00keziq\x02X\x03\x00\x00\x00ageq\x03K\x16X\x04\x00\x00\x00funcq\x04c__main__\nsi\nq\x05u.‘ 反序列化 import pickle def si(name): print("helle2",name) f=open("test.text","rb") #data=eval(f.read()) data=pickle.loads(f.read()) f.close() print (data["func"]("kezi")) 打印结果 helle2 kezi None 另一种简化写法 import pickle def si(name): print("helle",name) info={"name":"kezi","age":22,"func":si} f=open("test.text","wb") pickle.dump(info,f) #f.write(pickle.dumps(info)) f.close() import pickle def si(name): print("helle2",name) f=open("test.text","rb") #data=eval(f.read()) data=pickle.load(f)#data=pickle.loads(f.read()) f.close() print (data ["func"]("kezi"))
pickle序列化结果为bites类型,只适合于Python机器之间的交互。
JSON类型
|
Python类型
|
{}
|
dict
|
[]
|
list
|
"string"
|
‘str‘或u‘unicode‘
|
1234.56
|
int或float
|
true/false
|
True/False
|
null
|
None
|
注:
(1)序列化与反序列化是为了解决内存中对象的持久化与传输问题;
原文:https://www.cnblogs.com/kezi/p/11909418.html