Создание объекта 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 тоже должна быть одна и та же функция.