1

有一些我想使用 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')

谢谢!

4

1 回答 1

6

您需要定义一个将序列化datetime对象的辅助函数,并使用defaultjson.dump 或 json.dumps 的kwarg。请参阅带有重复答案链接的评论。

此外,您还需要考虑是否支持时区感知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-09-05T21:07:38.983 回答