MongoDB-如何使用Java中的printjson输出

MongoDB-如何使用Java中的printjson输出,java,json,mongodb,jackson,Java,Json,Mongodb,Jackson,我需要通过Java与MongoDB shell通信 简而言之,我使用类似Runtime.exec(特别是commons exec)的东西来调用 使用这种方法,我能够成功地调用MongoDB命令,将输出检索到流中(例如打印到stdout) 到目前为止一切都很好 我现在需要将这个输出“解析”成一个类似于 (我可以使用任何JSON库,如Jackson等,这可能适用于此) 这样我就可以根据一些要求“按摩”输出。(更改格式,删除一些键值对等) 至少在数组的情况下,当我查看printjson生成的输出时,它

我需要通过Java与MongoDB shell通信
简而言之,我使用类似Runtime.exec(特别是commons exec)的东西来调用

使用这种方法,我能够成功地调用MongoDB命令,将输出检索到流中(例如打印到stdout)

到目前为止一切都很好

我现在需要将这个输出“解析”成一个类似于
(我可以使用任何JSON库,如Jackson等,这可能适用于此) 这样我就可以根据一些要求“按摩”输出。(更改格式,删除一些键值对等)

至少在数组的情况下,当我查看printjson生成的输出时,它似乎不是一个有效的json数组,而是一个由新行分隔的有效json对象,中间没有逗号或包含[],这将使它成为一个有效数组

在本例中,关于如何将此输出解析为某种类型的holder对象(我可以用来读取/修改键值对)有何建议

我在编译时没有json命令,但我知道这些命令总是以printjson结尾

编辑-

因此,为了简化,例如,我正在寻找一种将以下输出解析为Java对象的方法-
(编译时不知道单个键/值对)


您可以直接在java中运行任何可以用javascript编写的内容(使用mongodb java驱动程序)


抛售并尝试使用java的输出是一个坏主意。相反,您应该使用驱动程序直接从java运行命令/查询。

似乎com.mongodb.util.JSON没有扩展DBObject,我不知道为什么人们声称您可以执行collection.insert(JSON.parse(一些JSON))。是否有其他方法插入我丢失的json

编辑:答案在这里很简单,但不在文档中。只需添加一个cast:

collection.insert((DBObject)JSON.parse(some json ... ));

我正在寻找的现在似乎不可能

最后我做的是抛出mongo调用,用java获取结果流,对结果进行JSONize(去掉object_id,因为我不需要它,适当地转换日期,等等),然后从修改后的结果字符串生成json对象。 丑陋的黑客,但唯一一个似乎是可能的,它的工作


如果你遇到过类似的问题,有具体的问题,请在下面的评论中发帖,如果可以的话,我会提供帮助。

你可以使用Java JSON解析器,在你链接的一个站点上列出了很多解析器;您不想使用MongoDB Java驱动程序有什么原因吗?在这种情况下,holder对象将是DBObject,您的代码将比解析eval'd JSON输出更干净。驱动程序中有一个API,允许您向服务器发送命令(或多或少类似于控制台上的操作)。MongoDB的javadoc站点已损坏,因此我无法查找它,但请让我尽快回复。太糟糕了,javadoc站点仍处于关闭状态(由于AWS今天早些时候的停机):(抱歉,我因为休息而醒来晚了:)以下是我所说的功能我有一个遗留系统,可以“生成”mongo shell的查询。你是说我可以接受shell理解的这些纯文本查询,并按原样将它们传递给mongojava驱动程序?什么方法?上次我检查时,mongo java驱动程序中没有允许这样做的内容。您可以使用JSON.parse(…)将JSON字符串转换为DBObject,并将其用作查询限制。这允许您获取如下字符串:
{field:“value”}
并使用它运行查询。感谢您进一步思考这个问题,但查询不是json,而是javascript,最初是针对mongo shell运行的。
collection.insert((DBObject)JSON.parse(some json ... ));