【发布时间】:2011-04-22 02:44:14
【问题描述】:
我需要通过 Java 与 MongoDB shell 通信
简而言之,我使用像 Runtime.exec (特别是公共执行)之类的东西来调用MongoDB shell in --eval mode
使用这种方法,我能够成功调用 MongoDB 命令,将输出检索到流中(例如打印到标准输出)
到目前为止一切都很好。
我现在需要将此输出“解析”成类似JSONObject 的数组
(我可以使用任何可能适合此的 JSON 库,例如 Jackson 等)
这样我就可以根据一些要求“按摩”输出。 (改变格式,去掉一些键值对等)
当我至少在数组的情况下查看 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
}
【问题讨论】:
-
您将使用 Java JSON 解析器,其中有很多在您链接的站点之一上列出; json.org
-
您是否有不想使用 MongoDB Java 驱动程序的原因?在这种情况下,持有者对象将是 DBObject,您的代码将比解析 eval 的 JSON 输出更清晰。
-
驱动程序中有一个 API,可以让您向服务器发送命令(或多或少像您在控制台上所做的那样)。 MongoDB 的 javadoc 站点已损坏,因此我无法查找,但请尽快回复。
-
太糟糕了,javadoc 站点仍然关闭(由于今天早些时候 AWS 中断):(
-
对不起,因为放假,我起晚了 :) 这里是我说的函数api.mongodb.org/java/2.5.3/com/mongodb/DB.html#eval