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

发布于 2021-01-29 15:09:34

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

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

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

关注者
0
被浏览
62
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    不,它在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标准未指定如何表示日期时间。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看