【问题标题】:Get Python JSON to serialize datetime获取 Python JSON 序列化日期时间
【发布时间】:2012-08-30 15:31:24
【问题描述】:

有一些我想使用 JSON 序列化的嵌套对象。问题是某些属性包含datetimes。当我尝试序列化这些 pbjects 时,Python 会抛出异常:

TypeError: datetime.datetime(2012, 6, 5, 17, 49, 35, 672115) 不是 JSON 可序列化的

使用 Python 2.7,有没有办法告诉 json 序列化程序:“当你看到日期时间时,不要烦人并抛出异常,只需使用:property.strftime('%Y-%m-%d %I:%M%p') 进行序列化”

谢谢!

【问题讨论】:

标签: python datetime python-2.7 json


【解决方案1】:

您需要定义一个辅助函数来序列化datetime 对象,并使用json.dump 或json.dumps 的default kwarg。查看带有重复答案链接的 cmets。

此外,您还需要考虑是否支持时区感知 datetime 对象。以及您是想在序列化期间保留时区还是在序列化之前转换为 UTC。

这是一个假设您要在序列化之前转换为 UTC 的示例。它依赖于python-dateutil 库:

from dateutil.tz import tzutc

UTC = tzutc()

def serialize_date(dt):
    """
    Serialize a date/time value into an ISO8601 text representation
    adjusted (if needed) to UTC timezone.

    For instance:
    >>> serialize_date(datetime(2012, 4, 10, 22, 38, 20, 604391))
    '2012-04-10T22:38:20.604391Z'
    """
    if dt.tzinfo:
        dt = dt.astimezone(UTC).replace(tzinfo=None)
    return dt.isoformat() + 'Z'

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 2019-03-22
    • 1970-01-01
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多