json序列化与反序列化
1.什么是序列化与反序列化?
序列化就是将内存中的数据结构转换成一种中间格式存储到硬盘或者基于到网络传输。
反序列化就是将硬盘中或者网络中传来的一种数据格式转换成内存中数据格式。
2.为什么要有序列化和反序列化?
1.可以保存程序的运行状态。(比如游戏中用户在某个状态下线,用户游戏的数据需要保存,这时候就可以用序列化直接把用户状态保存到json文件中。)
2.可以实现数据的跨平台交互(通过序列化存储的数据都是以字符串的形式存在,字符串是所有语言共有的数据类型)
3.序列化与反序列化怎么用?
json特点:
优点:跨平台性好 缺点:只能支持python的部分数据类型,不支持元组,集合,自定义类等。但是已经足够用,所以平常还是json用的比较多。
pickel特点:
优点:支持所有python数据类型 缺点:跨平台性差,只能支持python。
json序列化:两个过程 dump,dumps
1.先把数据类型转换成json对应的格式。
2.把序列化后的字符串存入json文件
反序列化:两个过程 load,loads
1.从json文件中读取序列化后字符串
2.再通过反序列化dumps方法把字符串转成对应的数据类型。
json序列化
import json
dic={'name':'egon','age':18,'sex':'male'}
#序列化:内存中的数据类型------>中间格式json
1、序列化得到json_str 序列化以后的数据类型就变成字符串
json_str=json.dumps(dic)
2、把json_str写入文件
with open('db.json','wt',encoding='utf-8') as f:
f.write(json_str)
#1和2合为一步
with open('db.json','wt',encoding='utf-8') as f:
json.dump(dic,f) # 序列化对象 目标文件
print(json_str,type(json_str)) # json格式不能识别单引号,全都是双引号
json反序列化
import json
dic={'name':'egon','age':18,'sex':'male'}
#反序列化:中间格式json-----》内存中的数据类型
#1、从文件中读取json_str
with open('db.json','rt',encoding='utf-8') as f:
json_str=f.read()
#2、将json_str转成内存中的数据类型
dic=json.loads(json_str) # loads的对象必须是字符串
#1和2可以合作一步
with open('db.json','rt',encoding='utf-8') as f:
dic=json.load(f) # 文件对象
print(dic['sex'])
越是困难的事越要立即去做,这样收益才会最大!!!