我需要通过Java与MongoDB shell进行通信 简而言之,我使用Runtime.exec(专门的公共执行)来调用MongoDB shell in --eval mode
使用这种方法,我能够成功调用MongoDB命令,将输出检索到流中(例如打印到stdout)
直到现在一直都很好。
我现在需要将此输出“解析”为类似JSONObject 的数组 (我可以使用像杰克逊这样适合的任何JSON库) 这样我就可以根据一些要求“按摩”输出。 (更改格式,删除一些键值对等。)
当我查看printjson在至少数组的情况下生成的输出时,它似乎不是一个有效的json数组,而是由新行分隔的有效json对象,其间没有逗号,或者包含[]它是一个有效的数组。
在这种情况下,有关如何将此输出解析为某种类型的持有者对象的建议,我可以使用它来读取/修改键值对吗?
我在编译时没有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
}
答案 0 :(得分:1)
您可以直接在java中使用javascript编写任何内容(使用mongodb java驱动程序)。
shell并尝试使用java的输出是一个坏主意。相反,您应该使用驱动程序直接从java运行命令/查询。
答案 1 :(得分:0)
似乎com.mongodb.util.JSON没有扩展DBObject,我不确定为什么人们声称你可以做collection.insert(JSON.parse(一些json))。是否有另一种插入我失踪的json的方法?
编辑:答案很简单,但不在文档中。只需添加演员:
collection.insert((DBObject)JSON.parse(some json ... ));
答案 2 :(得分:0)
目前我所寻找的东西似乎不可能。
我最终做的是炮轰mongo调用,在java中获取结果流,JSONize结果(摆脱object_id因为我不需要它,适当地转换日期等)然后生成一个json对象从此修改后的结果字符串。 丑陋的黑客,但唯一似乎可能的,它的工作原理。
如果您发现自己身处类似船只并有具体问题,请在下面的评论中发帖,如果可以,我会帮助您。