簡介:由於json.dumps() 只能序列化Python基本數據類型,如果我們想要在數據中摻雜時間對象,或者自定義類的對象則會造成序列化數據的失敗,因此json.dumps() 提供了一個屬性 cls=" ",可以自定義json類,來自定制我們需要序列化對象的返回值類型,進而實現數據的格式化,下面通過一個示例來進行展示。
1 from datetime import datetime 2 from datetime import date 3 import json 4 5 #自定義json擴展功能類 6 class JsonSerilize(json.JSONEncoder): 7 def default(self, o): 8 if isinstance(o, datetime): #如果序列化對象為datetime類型 9 return o.strftime("%Y-%m-%d %M:%H:%S"); 10 elif isinstance(o, date): #如果序列化對象為date類型 11 return o.strftime("%Y-%m-%d"); 12 elif isinstance(o, User): #如果序列化對象為User類型 13 return o.__dict__; 14 else: 15 return json.JSONEncoder.default(self, o); #如果不是上述類型,就按照json默認序列化方式操作 16 17 #自定義普通類 18 class User(): 19 def __init__(self): 20 self.name = "kelvin" 21 self.age = 18 22 23 #測試需要的序列化數據 24 dict = { 25 "status": True, 26 "date": datetime.now(), 27 "obj":User() 28 } 29 30 #直接進行序列化,結果報錯 31 # print(json.dumps(dict)) #報錯 TypeError: Object of type datetime is not JSON serializable 32 33 #在dumps中使用cls=“自定義json類”,成功執行 34 print(json.dumps(dict, cls=JsonSerilize)) # 正確執行:{"status": true, "date": "2020-03-28 21:21:50"} 35 print(json.dumps(dict, cls=JsonSerilize)) # 正確執行:{"status": true, "date": "2020-03-28 24:21:13", "obj": {"name": "kelvin", "age": 18}}