目錄java
把對象(變量)從內存中變成可存儲或傳輸的過程稱之爲序列化,在Python中叫pickling,在其餘語言中也被稱之爲serialization,marshalling,flattening。python
序列化的優勢:編程
json模塊:json
Json序列化並非python獨有的,json序列化在java等語言中也會涉及到,所以使用json序列化可以達到跨平臺傳輸數據的目的。網絡
json數據類型和python數據類型對應關係表編程語言
Json類型 | Python類型 |
---|---|
{} | dict |
[] | list |
"string" | str |
520.13 | int或float |
true/false | True/False |
null | None |
json模塊序列化和反序列化的一個過程以下圖所示code
# 序列化 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'}
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'>
Pickle序列化和全部其餘編程語言特有的序列化問題同樣,它只能用於Python,而且可能不一樣版本的Python彼此都不兼容,所以,只能用Pickle保存那些不重要的數據,即不能成功地反序列化也不要緊。可是pickle的好處是能夠存儲Python中的全部的數據類型,包括對象,而json不能夠。對象
pickle模塊序列化和反序列化的過程以下圖所示blog
# 序列化(注意: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'}
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'>