我想发送一个datetime。从Python中使用JSON序列化datetime对象,并在JavaScript中使用JSON反序列化。最好的方法是什么?
当前回答
简单地这样做:
r = json.dumps(your_json_data, default=str)
your_json_data = json.loads(r)
其他回答
对于Python到JavaScript的日期转换,日期对象需要是特定的ISO格式,即ISO格式或UNIX编号。如果ISO格式缺少一些信息,那么您可以使用Date将其转换为Unix编号。首先解析。此外,日期。parse也适用于React,而new Date可能会触发异常。
如果您有一个没有毫秒的DateTime对象,则需要考虑以下内容。:
var unixDate = Date.parse('2016-01-08T19:00:00')
var desiredDate = new Date(unixDate).toLocaleDateString();
示例日期同样可以是结果中的变量。API调用后的数据对象。
有关以所需格式显示日期的选项(例如,显示较长的工作日),请查看MDN文档。
对于跨语言项目,我发现包含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代码中可能遇到的最常见的编码问题,包括正确处理时区的date/datetime对象。
在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的结果
我的建议是使用图书馆。在pypi.org上可以找到几个。
我用这个,它工作得很好:https://pypi.python.org/pypi/asjson
我已经算出来了。
假设你有一个Python datetime对象d,是用datetime.now()创建的。其值为:
datetime.datetime(2011, 5, 25, 13, 34, 5, 787000)
你可以将它序列化为JSON格式的ISO 8601 datetime字符串:
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)
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用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对齐