json擴展之自定義序列化方式


簡介:由於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}}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM