python中这个错误的原因是json模块中的dumps方法无法对字典中datetime时间格式的数据进行转化,因为原生dumps的功能是将字典格式转化为字符串格式,但不支持转化时间格式的数据,所以需要将原生json类的部分内容改写,来处理这种特殊日期格式。
例如字典dic:
import json
from datetime import datetime
dic = {'time': datetime.now()}
print(dic)
dic_str = json.dumps(dic)
print(dic_str)
直接json.dumps(dic)会报如下错误:
TypeError: Object of type datetime is not JSON serializable
为解决此现象,我们只需重写dumps方法,令其继承json中JSONEncoder类,在调用json.dumps时传入相应类参数即可,实现代码如下:
import json
from datetime import datetime
class DateEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime("%Y-%m-%d %H:%M:%S")
else:
return json.JSONEncoder.default(self, obj)
dic = {'time': datetime.now()}
print(dic)
dic_str = json.dumps(dic, cls=DateEncoder)
print(dic_str)