【问题标题】:How to get a Date object from json data如何从 json 数据中获取 Date 对象
【发布时间】:2014-11-09 23:53:25
【问题描述】:

我只是想解析一个带有日期字段的 Json 文档,如下所示: 'death':Date('2007-03-17T04:00:00Z') 使用

com.mongodb.util.JSON.parse(document)

遇到值 Date 时出现异常。有什么帮助吗?

【问题讨论】:

    标签: javascript java json mongodb


    【解决方案1】:

    这里的关键是任何导出数据的东西都做错了。可能有人从 MongoDB shell 运行了一些东西并将控制台输出重定向到一个文件。这基本上是“做错了”。

    有一个名为MongoDB Extended JSON 的概念,实际上已经在其他一些领域得到应用,尤其是EJSON project。这样做的目的是确保任何导出的 JSON 都为 BSON 维护“类型”信息类型标识符(或其他对象类型,出于 EJSON 的目的),以便类似的“扩展 JSON”解析器可以将对象“重新构造”为它的预期形式。

    对于“日期”对象,预期的 JSON 表示如下:

    { "death": { "$date": "2007-03-17T04:00:00Z" } }
    

    由于 com.mongodb.util.JSON.parse 启用了扩展 JSON 规范的知识,因此任何此类 JSON 结构导致从解析的数据构造正确的日期对象。

    所以你现在拥有的只是一个“字符串”。事实上,如果它不是这样“引用”的:

    ´ { "death" : "Date('2007-03-17T04:00:00Z')" }
    

    那么它实际上甚至不是有效的 JSON,甚至需要在基本的 JSON 解析器不会出错之前将其处理为正确的形式。无论如何,结果仍然只是一个“字符串”,因此您需要对数字数据进行正则表达式匹配,然后将其传递给日期对象构造。

    显然,这里“最好”的做法是修复数据的“导出”源,以便它以正确的扩展方式将此日期解析为 JSON。那么你使用的解析器会做正确的事。

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多