赞同 1
分享

datatime无法序列化解决方法

简介:如果你需要将某一段信息序列化后存放在表中做为记录详细信息,在Python中直接用json.dumps来序列化datetime会直接报错。
  2020.08.19
  Bug Man
  1
  14
  35.175.107.185
  中国.上海
 
 

如果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"}