如果dumps之前把datetime转换为str确实有点麻烦,json其实提供了一个cls的这个参数给一个继承JSONEncoder类其中default方法来处理序列化的过程。
import datetime
class ComplexEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
else:
return json.JSONEncoder.default(self, obj)
n = datetime.datetime.now()
# r = json.dumps({'now': n}) # {TypeError}datetime.datetime(2020, 8, 18, 16, 28, 32) is not JSON serializable
r = json.dumps({'now': n}, cls=ComplexEncoder)
print(r) # {"now": "2020-08-18 17:54:50"}