【发布时间】: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
我只是想解析一个带有日期字段的 Json 文档,如下所示: 'death':Date('2007-03-17T04:00:00Z') 使用
com.mongodb.util.JSON.parse(document)
遇到值 Date 时出现异常。有什么帮助吗?
【问题讨论】:
标签: javascript java json mongodb
这里的关键是任何导出数据的东西都做错了。可能有人从 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。那么你使用的解析器会做正确的事。
【讨论】: