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}}
原文地址:https://www.cnblogs.com/sun-10387834/p/12589610.html