一尘不染

为什么python中的日期时间对象的json序列化对于日期时间对象不可用

python

为什么json序列化不适用于datetime对象。据我了解json序列化,任何对象的基本思想都可以调用
__str__内置函数,然后对作为响应得到的对象进行urlencode。但是在日期时间的情况下,我得到以下错误

TypeError: datetime.datetime(2012, 5, 23, 18, 38, 23, 37566) is not JSON serializable

虽然有__str__一种方法可以将已经可用的对象进行字符串化,但是似乎有意识地决定不这样做,为什么会这样呢?


阅读 135

收藏
2021-01-20

共1个答案

一尘不染

不,它在json模块中无法正常工作。该模块为您提供了默认的编码器:json.JSONEncoder。您需要扩展它以提供default序列化对象的方法的实现。像这样:

import json
import datetime
from time import mktime

class MyEncoder(json.JSONEncoder):

    def default(self, obj):
        if isinstance(obj, datetime.datetime):
            return int(mktime(obj.timetuple()))

        return json.JSONEncoder.default(self, obj)

print json.dumps(obj, cls=MyEncoder)

正如其他人正确指出的那样,原因是json标准未指定如何表示日期时间。

2021-01-20