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)

在Django开发中遇到后端向前端传递包含datetime数据时,由于json.dumps不支持datetime格式,导致转换错误。解决方案是自定义jsonEncoder,通过指定cls参数实现datetime到json的正确转换。
4117

被折叠的 条评论
为什么被折叠?



