Python 和 JavaScript 之间的 JSON 日期时间
2022-08-29 23:25:42
我想使用JSON从Python以序列化形式发送一个datetime.datetime对象,并使用JSON在JavaScript中反序列化。最好的方法是什么?
我想使用JSON从Python以序列化形式发送一个datetime.datetime对象,并使用JSON在JavaScript中反序列化。最好的方法是什么?
您可以将“默认”参数添加到 json.dumps 中来处理此问题:
date_handler = lambda obj: (
obj.isoformat()
if isinstance(obj, (datetime.datetime, datetime.date))
else None
)
json.dumps(datetime.datetime.now(), default=date_handler)
'"2010-04-20T20:08:21.634121"'
这是ISO 8601格式。
更全面的默认处理程序函数:
def handler(obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
elif isinstance(obj, ...):
return ...
else:
raise TypeError, 'Object of type %s with value of %s is not JSON serializable' % (type(obj), repr(obj))
更新:添加了类型和值的输出。
更新:同时处理日期
对于跨语言项目,我发现包含 RfC 3339 日期的字符串是最好的方法。RfC 3339 日期如下所示:
1985-04-12T23:20:50.52Z
我认为大多数格式都是显而易见的。唯一有点不寻常的事情可能是最后的“Z”。它代表 GMT/UTC。您还可以添加一个时区偏移量,例如 CEST(夏季的德国)的 +02:00。我个人更喜欢将所有内容都保留在UTC中,直到它被显示出来。
为了显示,比较和存储,您可以将其保留为所有语言的字符串格式。如果您需要计算日期,请轻松将其转换回大多数语言的本机日期对象。
因此,生成如下 JSON:
json.dump(datetime.now().strftime('%Y-%m-%dT%H:%M:%SZ'))
不幸的是,Javascript的Date构造函数不接受RfC 3339字符串,但互联网上有很多解析器。
huTools.hujson试图处理您在Python代码中可能遇到的最常见的编码问题,包括日期/日期时间对象,同时正确处理时区。