Создание объекта BSON из строки JSON
Вопрос
У меня есть приложение Java, которое получает данные из внешнего приложения. Входящие Jsons находятся в струнах. Я хотел бы проанализировать эти строки и создать объекты BSON.
К сожалению, я не могу найти API для этого в реализации Java's BSON.
Есть ли у меня внешний анализатор для этого, как GSON?
Решение
Самый простой способ - использовать библиотеку JSON, чтобы разобрать струны JSON в Map
а затем используйте putAll
метод для размещения этих значений в BSONObject
.
Этот ответ показывает, как использовать Джексон проанализировать строку json в Map
.
Другие советы
Официальный Mongodb Java Driver поставляется с полезными методами для анализа 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-river/
... и, с 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);
Официальные документы:
Чтобы преобразовать строку JSON в BSON, DO:
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, Do:
import org.bson.BasicBSONDecoder;
import org.bson.BSONObject;
BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(out);
String json_string = bsonObject.toString();
Использовать Document.parse(String json)
от org.bson.Document
. Анкет Он возвращается Document
объект, который является типом Bson
.
Вас может быть заинтересован в Bson4jackson Project, который позволяет вам использовать привязку к данным Джексона для работы с BSON (Создайте POJO из BSON, напишите как BSON) - тем более, что Джексон также работает с JSON. Таким образом, это позволит преобразовать, как вы упоминаете, просто используйте различные инстаксусы ObjectMapper (один, который работает с JSON, другим с BSON).
С Джексоном вы можете либо работать с полными POJO (Declare Structure, которую вы хотите), или с простыми картами, списками и так далее. Вам просто нужно объявить, к чтению данных при чтении данных (при записи тип определяется объектом, который вы проходите).
Вы найдете ответ на ваш вопрос в исходном коде https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cppКоторый имеет конверсию BSON в JSON.
В основном вещи вроде
ObjectId("XXX")
->{ "$oid" : "XXX" }
/XXX/gi
->{ "$regex" : "XXX", "$options" : "gi" }
и так далее...
Я бы предложил использовать методы Tojson () и Parse (String) BasicDBobject, потому что класс утилиты JSON был @Depricicated.
import com.mongodb.BasicDBObject;
public static BasicDBObject makeBsonObject(String json) {
return BasicDBObject.parse(json);
}
public static String makeJsonObject(BasicDBObject dbObj) {
return dbObj.toJson();
}
Я не уверен насчет Java, но у драйвера CPP MongoDB есть тип функции
Bsonobj fromjson (String)
который возвращает bsonobj в соответствии с пройденной строкой. В Java должна быть та же функция.