我需要通过Java与MongoDB shell通信。
简而言之,我正在使用类似于Runtime.exec (专用于commons)的东西来调用MongoDB外壳在-eval模式下。
使用这种方法,我能够成功地调用MongoDB命令,将输出检索到流中(例如,打印到stdout )。
到目前为止一切都很好。
我现在需要将这个输出“解析”成一个类似于 JSONObject的数组。
(我可以使用任何可能适用于此的JSON库,如Jackson等),这样我就可以根据某些需求“按摩”输出。(更改格式,删除一些键值对,等等)
当我查看printjson至少在数组情况下生成的输出时,它似乎不是一个有效的json数组,而是由新行分隔的有效json对象,没有中间的逗号或包围的[],这将使它成为一个有效的数组。
在这种情况下,对于如何将输出解析为某种类型的holder对象,我可以用来读取/修改键值对,有什么建议吗?
编译时我没有json命令,但我知道这些命令总是以printjson结尾
编辑-
因此,为了简化,例如,我正在寻找一种将以下输出解析为Java对象的方法-
(编译时不知道单个键/值对)
{
    "_id" : ObjectId("4db0e0289523f82ff6cd90d4"),
    "calendar_date" : "2009-11-10",
    "product_id" : 8,
    "channel" : "website",
    "country" : "USA",
    "total_unit_count" : 740,
    "total_amount" : 11367.29
}
{
    "_id" : ObjectId("4db0e0289523f82ff6cd90d5"),
    "calendar_date" : "2009-11-10",
    "product_id" : 8,
    "channel" : "website",
    "country" : "Australia",
    "total_unit_count" : 740,
    "total_amount" : 13893.09
}
{
    "_id" : ObjectId("4db0e0289523f82ff6cd90d6"),
    "calendar_date" : "2009-11-10",
    "product_id" : 8,
    "channel" : "retail",
    "country" : "USA",
    "total_unit_count" : 13,
    "total_amount" : 8296.89
}发布于 2012-02-06 20:23:12
我正在寻找的东西目前看来是不可能的。
最后我所做的是执行mongo调用,在java中获得结果流,将结果JSONize (去掉object_id,因为我不需要它,适当地转换日期,等等)。然后从这个修改后的结果字符串生成一个json对象。丑陋的黑客,但似乎唯一可行的,它的工作。
如果你发现自己在一个类似的船上,有具体的问题,张贴在下面的评论,我会帮助,如果我可以。
发布于 2011-06-23 11:57:59
您可以直接用javascript (使用mongodb驱动程序)运行任何可以用javascript编写的东西。
将java的输出打包并尝试使用是个坏主意。相反,您应该使用驱动程序直接从java运行命令/查询。
发布于 2011-08-27 19:14:04
com.mongodb.util.JSON似乎没有扩展DBObject,我不知道为什么人们声称您可以做collection.insert(一些json)。还有其他方法插入我丢失的json吗?
编辑:答案在这里很简单,但不在文档中。只需添加一个演员:
collection.insert((DBObject)JSON.parse(some json ... ));https://stackoverflow.com/questions/5751810
复制相似问题