目录java
把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其余语言中也被称之为serialization,marshalling,flattening。python
序列化的优势:编程
Json序列化并非python独有的,json序列化在java等语言中也会涉及到,所以使用json序列化可以达到跨平台传输数据的目的。json
json数据类型和python数据类型对应关系表网络
Json类型 | Python类型 |
---|---|
{} | dict |
[] | list |
"string" | str |
520.13 | int或float |
true/false | True/False |
null | None |
json模块序列化和反序列化的一个过程以下图所示编程语言
import json
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'} print(struct_data, type(struct_data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = json.dumps(struct_data) print(data, type(data))
{"name": "json", "age": 23, "sex": "male"} <class 'str'>
# 注意:不管数据是怎样建立的,只要知足json格式(若是是字典,则字典内元素都是双引号),就能够json.loads出来,不必定非要dumps的数据才能loads data = json.loads(data) print(data, type(data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
# 序列化 with open('Json序列化对象.json', 'w') as fw: json.dump(struct_data, fw)
# 反序列化 with open('Json序列化对象.json') as fr: data = json.load(fr) print(data)
{'name': 'json', 'age': 23, 'sex': 'male'}
Pickle序列化和全部其余编程语言特有的序列化问题同样,它只能用于Python,而且可能不一样版本的Python彼此都不兼容,所以,只能用Pickle保存那些不重要的数据,即不能成功地反序列化也不要紧。可是pickle的好处是能够存储Python中的全部的数据类型,包括对象,而json不能够。code
pickle模块序列化和反序列化的过程以下图所示对象
import pickle
struct_data = {'name': 'json', 'age': 23, 'sex': 'male'} print(struct_data, type(struct_data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
data = pickle.dumps(struct_data) print(data, type(data))
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00jsonq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x03\x00\x00\x00sexq\x04X\x04\x00\x00\x00maleq\x05u.' <class 'bytes'>
data = pickle.loads(data) print(data, type(data))
{'name': 'json', 'age': 23, 'sex': 'male'} <class 'dict'>
# 序列化(注意:pickle模块须要使用二进制存储,即'wb'模式存储) with open('Pickle序列化对象.pkl', 'wb') as fw: pickle.dump(struct_data, fw)
# 反序列化 with open('Pickle序列化对象.pkl', 'rb') as fr: pickle = pickle.load(fr) print(data)
{'name': 'json', 'age': 23, 'sex': 'male'}