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 jsonimport datetimeclass 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)