json and pickle 序列化

时间:2022-07-27 14:13:03

前言

文件只能存储字符串、二进制,若把内存的数据对象存到硬盘   从硬盘里读取数据,里面不止是字符串的类型,因此用到了json and pickle 序列化

json序列化

作用:用于不同语言进行的数据交互,json默认只能处理简单化的数据类型:字典、列表、字符串。为何只能处理简单的数据类型?因为java里的类和pyhton的类完全不一样,定义、特性等

文件只能存储字符串、二进制,例如将数据字典的数据类型写入文件,报错

按之前学过的知识对文件序列化

 info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
f.write(info)
f.close()
结果:
Traceback (most recent call last):
File "E:/python_3.5/second/json模块/json1.py", line 6, in <module>
f.write(info)
TypeError: write() argument must be str, not dict

数据类型为字符串已存入文件

 info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
f.write(str(info))
f.close()
写入的json1文件
{'age': 16, 'name': 'Mike'}

用json.dumps()序列化

 import json
info = {
"name":"Mike",
"age":16
}
f = open("json1","w",encoding = "utf-8")
#print(json.dumps(info)) #结果{"age": 16, "name": "Mike"}
f.write(json.dumps(info)) 写入文件
{"age": 16, "name": "Mike"}

json.dump()序列化

不用写f.write()  将文件句柄传入

 import json
info = {
"name":"Mike",
"age":16,
#"fun":sayhi
} f = open("json1","w",encoding = "utf-8”)
json.dump(info,f) 写入文件:
{"age": 16, "name": "Mike"}

json.loads()反序列化

按之前学过的知识对文件反序列化

 f = open("json1","r",encoding = "utf-8")
data = eval(f.read())
print(data)
print(data["age"]) 结果:
{'age': 16, 'name': 'Mike'}
16

用json反序列化读取文件

 import json
f = open("json1","r",encoding = "utf-8")
data = json.loads(f.read())
print(data["age"])
结果
16

json.load()反序列化

 import json
f = open("json1","r")
# data = pickle.loads(f.read())
print(json.load(f)) 结果:
{'age': 16, 'name': 'Mike'}

pickle.dumps() 序列化

pickle只有在Python本语言里使用,java不认识pickle数据类型,只认识json数据类型

pickle可以序列化python里的所有数据类型

 import pickle
def sayhi():
print("hello")
info = {
"name":"Mike",
"age":16,
"fun":sayhi
} f = open("json1","wb")
f.write(pickle.dumps(info))

写入的文件

json and pickle 序列化

注意:

json and pickle 序列化

pickle.loads() 反序列化

 import pickle
def sayhi():
print("hello") #为何这里要再写一遍,在序列化时程序结束函数的内存地址已经被释放了 已找不到 f = open("json1","rb")
data = pickle.loads(f.read())
print(data["age"])
print(data)
结果:
16
{'name': 'Mike', 'fun': <function sayhi at 0x005D2FA8>, 'age': 16}