MongoDB - Как использовать вывод printjson в Java - PullRequest
2 голосов
/ 22 апреля 2011

Мне нужно общаться с оболочкой MongoDB через JavaКороче говоря, я использую что-то вроде Runtime.exec (специально для exec) для вызова оболочки MongoDB в режиме --eval

Используя этот подход, я могу успешно вызывать MongoDBкоманды, получить вывод в поток (и напечатать на stdout, например)

Все хорошо до этого момента.

Теперь мне нужно "разобрать" этот вывод в нечто вродемассив JSONObject (я могу использовать любую библиотеку JSON, например, Джексона и т. Д., Которая может быть подходящей для этого), чтобы я мог "массировать" вывод на основе некоторых требований.(Измените формат, удалите несколько пар ключ-значение и т. Д.)

Когда я смотрю на вывод, сгенерированный printjson, по крайней мере для массивов, он не является допустимым массивом json, а скорее допустимым jsonобъекты, разделенные новой строкой без запятой между ними или включающие [], что сделало бы его действительным массивом.

В этом случае, любые предложения о том, как разбить этот вывод в некоторый вид объектов-держателей, которые я могу использоватьчитать / изменять пары ключ-значение?

У меня нет команд json во время компиляции, но я знаю, что эти команды всегда заканчиваются в printjson

EDIT -

Итак, чтобы упростить, например, я ищу способ разбить следующий вывод в объекты 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
}

Ответы [ 3 ]

1 голос
/ 23 июня 2011

Вы можете запустить все, что можете написать в javascript непосредственно в java (используя драйвер mongodb java).

Это плохая идея выложить и попытаться использовать вывод из Java.Вместо этого вы должны запускать команды / запросы непосредственно из Java с помощью драйвера.

0 голосов
/ 07 февраля 2012

То, что я искал, в данный момент кажется невозможным.

В итоге я выложил вызовы монго, получил поток результатов в Java, JSONize результат (избавился от object_idтак как мне это не нужно, соответственно преобразуйте даты и т. д.), а затем сгенерируйте объект json из этой измененной строки результата.Гадкий взлом, но единственный, который казался возможным, и это работает.

Если вы когда-нибудь окажетесь в подобной лодке и у вас возникнут конкретные вопросы, напишите в комментарии ниже, и я помогу, если смогу.

0 голосов
/ 27 августа 2011

кажется, что com.mongodb.util.JSON не расширяет DBObject, я не уверен, почему люди утверждают, что вы можете сделать collection.insert (JSON.parse (некоторые json))Есть ли другой способ вставить json, который мне не хватает?

edit: ответ здесь прост, но его нет в документации.просто добавьте актерский состав:

collection.insert((DBObject)JSON.parse(some json ... ));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...