概念
序列化(Serialization):將對象的狀態信息轉換為可以存儲或可以通過網絡傳輸的過程,傳輸的格式可以是JSON,XML等。反序列化就是從存儲區域(JSON,XML)讀取反序列化對象的狀態,重新創建該對象。
JSON(Java Script Object Notation):一種輕量級數據交互格式,相對於XML而言更簡單,也易於閱讀和編寫,機器也方便解析和生成,Json是JavaScript中的一個子集。
python2.6版本開始加入了JSON模塊,python的json模塊序列化與反序列化的過程分別是encoding和decoding。
- encoding:把一個python對象編碼轉換成Json字符串。
- decoding:把json格式字符串編碼轉換成python對象。
具體應用
json提供四個功能:dumps, dump, loads, load
1 # dumps功能 2 # 將數據通過特殊的形式轉換為所有程序語言都認識的字符串 3 >>> import json 4 >>> data = ['aa', 'bb', 'cc'] 5 >>> j_str = json.dumps(data) 6 >>> j_str 7 '["aa", "bb", "cc"]'
1 # loads功能 2 # 將json編碼的字符串再轉換為python的數據結構 3 >>> j_str 4 '["aa", "bb", "cc"]' 5 >>> mes = json.loads(j_str) 6 >>> mes 7 ['aa', 'bb', 'cc']
1 # dump功能 2 # 將數據通過特殊的形式轉換為所有程序語言都認識的字符串,並寫入文件 3 with open('D:/tmp.json', 'w') as f: 4 json.dump(data, f)
1 # load功能 2 # 從數據文件中讀取數據,並將json編碼的字符串轉換為python的數據結構 3 with open('D:/tmp.json', 'r') as f: 4 data = json.load(f)
說明
json編碼支持的基本類型有:None, bool, int, float, string, list, tuple, dict.
對於字典,json會假設key是字符串(字典中的任何非字符串key都會在編碼時轉換為字符串),要符合JSON規范,應該只對python列表和字典進行編碼。此外,在WEB應用中,把最頂層對象定義為字典是一種標准做法。
json編碼的格式幾乎和python語法一致,略有不同的是:True會被映射為true,False會被映射為false,None會被映射為null,元組()會被映射為列表[],因為其他語言沒有元組的概念,只有數組,也就是列表。
1 >>> import json 2 >>> data = {'a':True, 'b':False, 'c':None, 'd':(1,2), 1:'abc'} 3 >>> j_str = json.dumps(data) 4 >>> j_str 5 '{"a": true, "c": null, "d": [1, 2], "b": false, "1": "abc"}'