我现在使用java方法com.mongodb.util.JSON.parse(参数)将json字符串转换为DBObject.我发现,在大多数情况下,例如,当json字符串中的键是简单类型(如string或int )时,JSON.parse()方法和终端都可以使用它。例如:
json string:{'times':8}终端中的JSON.parse({'times':8})和db.collection.find({'times':8})都可以正常工作。
但是当我在ISODate或_id上查询时,事情就不一样了:
json string 1 :{'createDate':ISODate('2013-10-21T06:39:16.692Z')}
json strign 2: {'createDate':{'$date':'2013-10-21T06:39:16.692Z'}}json字符串1在终端中可以正常工作,但无法通过JSON.parse()方法进行解析。相反,json字符串2可以通过JSON.parse()方法解析,但不能在终端中使用。
同样的事情也发生在_id上。
json string 3:{'_id':ObjectId('1231daf213432414321431')}
json string 4:{'_id':{'$oid':'fadf234234sdfadfasdfa12'}}json字符串3在终端中可以正常工作,但无法通过JSON.parse()方法进行解析。相反,json字符串4可以通过JSON.parse()方法解析,但不能在终端中使用。我不知道这些差异的原因。
发布于 2014-01-06 19:22:07
Mongo Shell中使用的构造函数是JavaScript代码,显然不是您希望在Java应用程序中解析的严格JSON的一部分。这里要批评的一点是,shell不支持'$date‘之类的东西(因为我刚刚也测试了自己)。
这是例如讨论的here。
https://stackoverflow.com/questions/20946991
复制相似问题