序列化相关
如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON
1.json
- 应用场景:
json模块主要用于处理json格式的数据,可以将python的字典或列表等对象转化为json(序列化)格式的数据,同时也可以将json格式的数据转化为python的字典(反序列化),便于python处理,便于跨平台或跨语言进行数据交互 - 功能:
- Json模块提供了四个功能:dumps、dump、loads、load
- 具体应用:
- dumps:将python 基本数据类型转化为json格式数据类型
- loads:将json格式数据类型转化为python数据类型
# author:PicaHealth
# contact: 172212595@qq.com
# datetime:2019/3/26 21:47
# software: PyCharm
"""
文件说明:json_test 序列化、反序列化
"""
import json
s1 = {'key1': 'value1'} # 这是一个字典
print(type(s1))
# 输出结果: <class 'dict'>
# Python对象序列化为json
json_str = json.dumps(s1)
print("json_str类型:%s"%type(json_str))
print("json_str内容:%s"%json_str)
# 输出结果:
# json1_str类型:<class 'str'> #经dumps方法处理之后返回的是一个str,内容就是标准的JSON
# json1_str内容:{"key1": "value1"}
# 把JSON反序列化为Python对象
json_obj=json.loads(json_str)
print("json_obj类型:%s"%type(json_obj))
print("json_obj内容:%s"%json_obj)
# 输出结果:
# json_obj类型:<class 'dict'> #经loads处理之后,str变味dict
# json_obj内容:{'key1': 'value1'}
- dump 和load 用于对文件进行序列化和反序列化
import json
s1 = {"key1": "value1"} # 这是一个字典
print(type(s1))
# 输出结果: <class 'dict'>
json.dump(s1,open('序列化.txt','w')) #将s1序列化为json,并写入文件
e1 = json.load(open('序列化.txt','r')) #读取json文件,并反序列化为Python字典
print("e1的类型:",type(e1))
print('e1的内容:',e1)
# 输出结果:
# e1的类型: <class 'dict'>
# e1的内容: {'key2': 'value2'}
2.pickle
- 应用场景:
pickle模块也有基本的数据序列和反序列化,和json的功能类似。和json不同的是:json 更适合跨语言 可以处理字符串,基本数据类型;pickle属于python专有,更适合处理复杂类型的序列化- 由于pickle属于Python特有,而且方法与json模块基本一致,这里就不做概述,详情可以参考结尾的文章
小结:
Python语言特定的序列化模块是pickle,但如果要把序列化搞得更通用、更符合Web标准,就可以使用json模块。
参考文章: