当前位置: 首页 > 面试题库 >

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

殷宾白
2023-03-14
问题内容

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

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

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


问题答案:

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



 类似资料:
  • 由来 考虑工具类的局限性,在某些情况下使用并不简便,于是DateTime类诞生。DateTime对象充分吸取Joda-Time库的优点,并提供更多的便捷方法,这样我们在开发时不必再单独导入Joda-Time库便可以享受简单快速的日期时间处理过程。 说明 DateTime类继承于java.util.Date类,为Date类扩展了众多简便方法,这些方法多是DateUtil静态方法的对象表现形式,使用D

  • 问题内容: 如何对日期和/或日期时间对象列表进行排序?接受的答案在这里是不是为我工作: 问题答案: 你得到,因为它运行 在原地 ,这意味着它不返回任何东西,但修改列表本身。您只需要呼叫而无需再次分配。 有一个内置函数,该函数返回列表的排序版本-也会执行您想要的操作。

  • 问题内容: 我有一个网络表单,用户可以在其中从日历弹出窗口中选择日期,并从下拉菜单中选择时间。目前,我正在尝试使用Date对象存储日期。 这个对象的输出类似于: 1970年1月1日,00:00:00 GMT 我真正想做的是将其分开并以类似 27/02/2013 的格式存储日期,并以24小时格式(例如 23:45) 将时间作为单独的对象。我不确定如何用Java做到这一点。 使用SimpleDateF

  • 问题内容: 我正在获取格式为“ 2009-05-28T16:15:00”的日期时间字符串(我相信这是ISO 8601)。一种可能的选择似乎是使用time.strptime元组的前六个元素并将其传递到datetime构造函数中来解析字符串,例如: 我还没有找到一种“清洁”的方法。有一个吗? 问题答案: 我更喜欢使用dateutil库进行时区处理和一般的可靠日期解析。如果要获得类似ISO 8601的字

  • 问题内容: 我正在尝试为超过5个小时的旧窗口小部件编写Django查询,但我有点迷失了。窗口小部件模型具有一个用窗口小部件的创建时间填充的。 问题答案: 如果是模型的名称,并且具有名为的DateTimeField属性,则查询为: 请注意,这意味着“创建的内容少于”。

  • 我有一个熊猫列,其中包含时间数据和列数据类型是对象。 如何将列转换为Datatime