# 1、什么是序列化
# 序列化指的是把内存的数据类型转换成一种特定格式的内容
# 该格式的内容可用于存储或者传输给其他平台使用
# 内存中的数据类型-->序列化-->特定的个数(json格式或者pickle格式)
# 内存中的数据类型<--序列化<--特定的个数(json格式或者pickle格式)
# 土办法:
# {'a':1,'b':2,}---->序列化str({'a':1,'b':2,})--->'{'a':1,'b':2,}'
# {'a':1,'b':2,}----<反列化evla({'a':1,'b':2,})<---'{'a':1,'b':2,}'
# 2、为何要有序列化
# 序列化得到的结果==》特定格式的内容由两种用途
# 1、可用于存储 --》用于存档
# 2、传输给其他平台使用 =》夸平台数据交互
# python java
# 列表 特定的格式 数组
# 针对用途1的特定格式:可以是一种专用的格式=》pickle只有python可以识别
# 强调针对用途二的特定格式应该是一种通用的能够被所有语言识别的形式=》json格式
# 3、如何序列化与反序列化
import json
# 将序列化的结果写入文件的复杂方法
# # 序列化 json.dumps()
# json_res = json.dumps([1,'aaa',True,False,None])
# 序列化不存在连续的写,都是把内容整体的写入,下一次在新的写
# with open(r'txt.json',mode='wt',encoding='utf-8') as f :
# f.write(json_res)
# print(json_res,type(json_res))
# 将序列化的结果写入文件的简单方法
# with open(r'txt.json',mode='rt',encoding='utf-8') as f:
# json.dump([1,'aaa',True,False,None],f) # 等同于dumps+f.write()一步到位
# 从文件读取json格式进行反序列化的复杂方法
# 反序列化json.loads()
# with open(r'txt.json',mode='rt',encoding='utf-8') as f:
# json_res = f.read()
# res = json.loads(json_res)
# print(res,type(res))
# 从文件读取json格式进行反序列化的简单方法
# with open(r'txt.json',mode='rt',encoding='utf-8') as f:
# l=json.load(f) # 等同于f.read()+json.loads()
# 什么是序列化
"""
序列化就是把内存中的数据序列化成一种特定的格式用于跨平台传输
"""
# 什么是反序列化
"""
反序列化就是把这种通过序列化成的特定格式在反序列化成原来的数据格式
"""
# 序列化
# with open(r'test.json',mode='wt',encoding='utf-8') as f :
# res_json = json.dump([1,'aaa',True],f)
# 反序列化
# with open(r'test.json',mode='rt',encoding='utf-8') as f:
# l = json.load(f)
# print(l)
# json 验证 json格式兼容的是所有语言通用的数据类型,不能识别某一语言的所独有类型
# json.dumps({1,2,3})
# 强调一定要搞清楚json格式,不要与python格式弄混淆
# l=json.loads('[1,"aaa",true]')
# print(l,type(l))
# l = json.loads(b'[1,"aaa",true]')
# print(l,type(l))
#
# res = json.dumps({'name':'哈哈哈'})
# # print(res,type(res))
# #
# # l = json.loads('{"name": "\u54c8\u54c8\u54c8"}')
# # print(l,type(l))
# 猴子补丁是一种在入口处更改功能的编程实现
# import json
# # json.dumps= 其他更好的dumps功能
# # json.loads= 其他更好的loads功能
# import ujson
# # 猴子补丁
# def monkey_patch_json():
# json.dumps=ujson.dumps
# json.loads=ujson.loads
# 什么是猴子补丁
"""
猴子补丁就是在导入模块的入口处修改该模块的部分功能,
以至于后面的导入都能使用修改过后的功能而不改变功能使用的方法
例如json入口处
json.dumps=ujson.dumps
json.locals=ujson.locals
"""
# 5、pickle模块
# import pickle
# res = pickle.dumps({1,2,3,4,5,6})
# print(res,type(res))
#
# s = pickle.loads(res)
# print(s,type(s))