django开发过程中,后端向前端传入从数据库获取的数据,其中包含了datetime类型和time类型数据,经过json的json.dumps()方法转换后传递,报错:
Object of type 'datetime' is not JSON serializable
因为datetime不是json基本格式,json基本格式转换只有下面几种
+-------------------+---------------+
| Python | JSON |
+===================+===============+
| dict | object |
+-------------------+---------------+
| list, tuple | array |
+-------------------+---------------+
| str | string |
+-------------------+---------------+
| int, float | number |
+-------------------+---------------+
| True | true |
+-------------------+---------------+
| False | false |
+-------------------+---------------+
| None | null |
+-------------------+---------------+
想要转换其他类型,都需要自定义jsonEncoder
代码如下:
import json
import datetime
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime): # 日期和时间
return obj.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(obj, datetime.date): # 日期
return obj.strftime('%Y-%m-%d')
elif isinstance(obj, datetime.time): # 时间
return obj.strftime('%H:%M:%S')
else:
return json.JSONEncoder.default(self, obj)
使用时,只要加上一个cls参数即可
return json.dumps(datetimestr, cls=ComplexEncoder)