序列化,指的是把內存中的變量(如類的實例)變成可存儲或可傳輸的過程。
JSON(JavaScript Object Notation, JavaScript對象表示)是網絡傳輸中經常使用的一種數據形式。
在Python中,經常將字典轉化成JSON來發送,使用的主要方法為dumps:
import json data = {'name':'nick', 'age':12} data_json = json.dumps(data)
注意以下幾點:
1.data_json為轉換后的JavaScript對象,在JavaScript對象里,key值默認為字符串格式
2.data_json中的key的順序與data中的順序不保證相同
3.data還可以是str,list,tuple,int等其他類型,這時也會對data進行相應的轉化
4.data_json的數據類型為str
將JSON格式的數據轉化為Python中的dict時,應使用loads:
data = json.loads(data_json)
這時,data中所有的字符串默認均為unicode,因為JSON標准規定的編碼為UTF-8
注意:對於文件的JSON處理,應使用dump,load
要想JSON化類的實例,應在dumps中指定可選參數default,如:
def func(obj):
def foo(obj): return {'name':obj.name, 'age':obj.age}
此后使用 data_json = json.dumps(s, default = foo) 即可序列化類的實例s
更簡便的方法是:
json.dumps(s, default = lambda x: x.__dict__)
要得到JSON反序列化的類的實例,可使用loads的object_hook參數:
def bar(obj): return Person(obj['name'], d['age'])
c = json.loads(data_json, object_hook = bar)
此時得到的c為Person類的一個實例