【问题标题】: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'