为了账号安全,请及时绑定邮箱和手机立即绑定

Python和JavaScript之间的JSON日期时间

/ 猿问

Python和JavaScript之间的JSON日期时间

慕的地6264312 2019-07-22 14:39:30

Python和JavaScript之间的JSON日期时间

我想从Python中发送一个序列化形式的datetime.datetime对象杰森并在JavaScript中使用JSON进行反序列化。做这件事最好的方法是什么?



查看完整描述

3 回答

?
慕的地2183247

您可以将“默认”参数添加到json.ddump以处理此问题:

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))

更新:添加类型和值的输出。
更新:也处理日期


查看完整回答
反对 回复 2019-07-22
?
忽然笑

假设您有一个Python datetime对象,d,使用datetime.Now()创建。它的价值是:

datetime.datetime(2011, 5, 25, 13, 34, 5, 787000)

您可以将其序列化为JSON,作为ISO 8601日期时间字符串:

import json    
json.dumps(d.isoformat())

示例datetime对象将序列化为:

'"2011-05-25T13:34:05.787000"'

一旦在Javascript层接收到此值,就可以构造Date对象:

var d = new Date("2011-05-25T13:34:05.787000");

从Javascript 1.8.5开始,Date对象有一个toJSON方法,它以标准格式返回字符串。因此,要将上面的Javascript对象序列化回JSON,命令如下:

d.toJSON()

这会让你:

'2011-05-25T20:34:05.787Z'

这个字符串一旦在Python中接收到,就可以反序列化回datetime对象:

datetime.strptime('2011-05-25T20:34:05.787Z', '%Y-%m-%dT%H:%M:%S.%fZ')

这将导致以下datetime对象,该对象与您开始使用的对象相同,因此是正确的:

datetime.datetime(2011, 5, 25, 20, 34, 5, 787000)


查看完整回答
反对 回复 2019-07-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信