【问题标题】:Serializing datetime.date to JSON with javascript Date [duplicate]使用javascript Date将datetime.date序列化为JSON [重复]
【发布时间】:2014-01-17 11:54:44
【问题描述】:

如何将包含 datetime.date 对象的 python 列表序列化为 javascript Date 对象的 JSON 数组?例如:

lst = [datetime.date(2013, 12, 30), datetime.date(2013, 12, 31)]
print serialize(lst)
# should print "[new Date(2013, 12, 30), new Date(2013, 12, 31)]"

我已经尝试使用自定义处理程序 json.dumps,但处理程序只能返回可序列化的对象,而不能返回实际的 JSON 语法。

【问题讨论】:

  • 您不能拥有“...JavaScript Date 对象的 JSON 数组”。您可以拥有一个 JSON 数组,您可以拥有一个包含 Date 对象的 JavaScript 数组。 JSON != JavaScript,而 JSON 没有任何日期的概念。
  • @T.J.Crowder 感谢您的澄清,那么我怎样才能拥有一个包含 Date 对象的 javascript 数组?
  • 基本上,使用.isoformat()Date 类型在 JSON 中不受支持。
  • @zsong 谢谢。数组是否为 JSON 并不重要,javascript 也可以。如果我使用 .isoformat,我将不得不在 javascript 中对数组进行另一次传递,以将值转换为 Date 对象,这是我不想做的事情。
  • 当心 - 当你在 JavaScript 中使用 new Date(...) 时,月份的范围是 0-11。在 python 中,它们是 1-12。

标签: javascript python json datetime serialization


【解决方案1】:

JavaScript Date 对象被 json 序列化为字符串。但是,您可以从这个序列化字符串构造一个日期对象。 python datetime.date 类提供的最接近的字符串似乎是isoformat

lst = [datetime.date(2013, 12, 30).isoformat(),
    datetime.date(2013, 12, 31).isoformat()]

在 JavaScript 方面,这些只是像"2013-12-31" 这样的字符串。您可以从中构造一个日期对象 -- new Date("2013-12-30")。它可能看起来像:

lst = JSON.parse(lstJson);
lst.forEach(function (date) {
    var date = new Date(date);
});

【讨论】:

  • 谢谢,但有没有办法直接在 python 中完成所有这些操作?
  • @Tzach 做了什么?您不能将 JavaScript 日期对象本身存储在 JSON 中。它们被序列化为代表字符串。
  • 我并不关心数组是 JSON 还是 javascript,我只需要一个看起来像问题中的输出字符串,所以我可以将它嵌入到现有的 JS 代码中,而无需在 JS 中遍历数组。
猜你喜欢
  • 2018-06-26
  • 2011-12-23
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多