Создание объекта BSON из строки JSON
У меня есть приложение Java, которое берет данные из внешнего приложения. Входящие JSON находятся в Строках. Я хотел бы проанализировать эти строки и создать объекты BSON.
Несчастливо, я не могу найти API для реализации Java BSON.
Я использую внешний синтаксический анализатор для таких, как GSON?
Ответы
Ответ 1
Самый простой способ - использовать библиотеку JSON для синтаксического анализа строк JSON в Map
, а затем использовать putAll
, чтобы поместить эти значения в BSONObject
.
Этот ответ показывает, как использовать Jackson для анализа JSON string в Map
.
Ответ 2
Официальный драйвер MongoDB Java поставляется с утилитами для разбора JSON на BSON и сериализации BSON для JSON.
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
DBObject dbObj = ... ;
String json = JSON.serialize( dbObj );
DBObject bson = ( DBObject ) JSON.parse( json );
Драйвер можно найти здесь: https://mongodb.github.io/mongo-java-driver/
Ответ 3
... И, начиная с 3.0.0, вы можете:
import org.bson.Document;
final Document doc = new Document("myKey", "myValue");
final String jsonString = doc.toJson();
final Document doc = Document.parse(jsonString);
Официальные документы:
Ответ 4
Чтобы преобразовать строку json в bson, выполните:
import org.bson.BasicBSONEncoder;
import org.bson.BSONObject;
BSONObject bson = (BSONObject)com.mongodb.util.JSON.parse(string_json);
BasicBSONEncoder encoder = new BasicBSONEncoder();
byte[] bson_byte = encoder.encode(bson);
Чтобы преобразовать bson в json, выполните:
import org.bson.BasicBSONDecoder;
import org.bson.BSONObject;
BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(out);
String json_string = bsonObject.toString();
Ответ 5
Вам может быть интересно bson4jackson project, который позволяет вам использовать привязку данных Джексона для работы с BSON (создавать POJO из BSON, напишите как BSON) - тем более, что Джексон также работает с JSON. Таким образом, это позволит преобразовать, как вы говорите, просто используйте разные объекты instMaster (ObjectMapper) (которые работают с JSON, другие с BSON).
С Jackson вы можете либо работать с полными POJO (объявить структуру, которую хотите), либо с помощью простых карт, списков и т.д. Вам просто нужно объявить, что вводить для привязки при чтении данных (при записи, тип определяется объектом, который вы передаете).
Ответ 6
Вы найдете ответ на свой вопрос в исходном коде https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp
Который имеет преобразование BSON в JSON.
В принципе, такие вещи, как
-
ObjectId("XXX")
→ { "$oid" : "XXX" }
-
/XXX/gi
→ { "$regex" : "XXX", "$options" : "gi" }
и т.д.
Ответ 7
Я не уверен в java, но драйвер CPP mongoDB имеет тип функции
BSONObj fromjson (строка)
который возвращает BSONObj в соответствии с переданной строкой. В Java тоже должна быть одна и та же функция.