我想发送一个datetime。从Python中使用JSON序列化datetime对象,并在JavaScript中使用JSON反序列化。最好的方法是什么?
当前回答
在python方面:
import time, json
from datetime import datetime as dt
your_date = dt.now()
data = json.dumps(time.mktime(your_date.timetuple())*1000)
return data # data send to javascript
javascript方面:
var your_date = new Date(data)
哪里的数据是python的结果
其他回答
在python方面:
import time, json
from datetime import datetime as dt
your_date = dt.now()
data = json.dumps(time.mktime(your_date.timetuple())*1000)
return data # data send to javascript
javascript方面:
var your_date = new Date(data)
哪里的数据是python的结果
使用json,你可以子类化JSONEncoder并覆盖default()方法来提供你自己的自定义序列化器:
import json
import datetime
class DateTimeJSONEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()
else:
return super(DateTimeJSONEncoder, self).default(obj)
然后,你可以这样调用它:
>>> DateTimeJSONEncoder().encode([datetime.datetime.now()])
'["2010-06-15T14:42:28"]'
我的建议是使用图书馆。在pypi.org上可以找到几个。
我用这个,它工作得很好:https://pypi.python.org/pypi/asjson
如果你确定只有Javascript会使用JSON,我更喜欢直接传递Javascript Date对象。
datetime对象上的ctime()方法将返回一个Javascript Date对象可以理解的字符串。
import datetime
date = datetime.datetime.today()
json = '{"mydate":new Date("%s")}' % date.ctime()
Javascript会很乐意使用它作为对象文字,这样就有了内置的Date对象。
游戏后期……:)
一个非常简单的解决方案是给json模块的默认设置打补丁。 例如:
import json
import datetime
json.JSONEncoder.default = lambda self,obj: (obj.isoformat() if isinstance(obj, datetime.datetime) else None)
现在,您可以使用json.dumps(),就好像它一直支持datetime…
json.dumps({'created':datetime.datetime.now()})
如果你需要对json模块进行扩展,并且不希望改变你或其他人使用json序列化的方式(无论是在现有代码中还是不在现有代码中),这是有意义的。
注意,有些人可能认为以这种方式修补库是一种糟糕的做法。 如果您希望以多种方式扩展应用程序,则需要特别注意-在这种情况下,我建议使用ramen或JT的解决方案,并在每种情况下选择适当的json扩展。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- Babel 6改变了它导出默认值的方式
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何配置历史记录?
- ES6模板文字可以在运行时被替换(或重用)吗?
- [Vue警告]:找不到元素
- 查询JSON类型内的数组元素
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 可以在setInterval()内部调用clearInterval()吗?
- AngularJS控制器的生命周期是什么?
- 无法读取未定义的属性“msie”- jQuery工具
- 将旋转的xtick标签与各自的xtick对齐