Вопрос

У меня есть приложение 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 должна быть та же функция.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top