Создание объекта BSON из строки JSON - PullRequest
43 голосов
/ 25 июня 2010

У меня есть приложение Java, которое получает данные из внешнего приложения.Входящие JSON находятся в строках.Я хотел бы проанализировать эти строки и создать объекты BSON.

К сожалению, я не могу найти API для этого в реализации BSON в Java.

Должен ли я использовать внешний анализатор для этого, как GSON?

Ответы [ 9 ]

39 голосов
/ 04 сентября 2012

Официальный драйвер 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/

37 голосов
/ 06 октября 2015

... А с версии 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);

Официальные документы:

12 голосов
/ 25 июня 2010

Самый простой способ - использовать библиотеку JSON для анализа строк JSON в Map, а затем использовать метод putAll для помещения этих значений в BSONObject.

В этом ответе показано, как использовать Джексона для анализа строки JSON в Map.

10 голосов
/ 14 мая 2014

Чтобы преобразовать строку 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();
4 голосов
/ 25 мая 2018

Используйте Document.parse(String json) из org.bson.Document.Возвращает Document объект типа Bson.

3 голосов
/ 06 января 2011

Вас может заинтересовать проект bson4jackson , который позволяет использовать привязку данных Jackson для работы с BSON (создавать POJO из BSON, писать как BSON) - тем более что Джексон также работает с JSON. Так что это позволит преобразование, как вы упомянули, просто используйте различные экземпляры ObjectMapper (один, который работает с JSON, другой с BSON).

С Джексоном вы можете работать либо с полными POJO (укажите желаемую структуру), либо с простыми картами, списками и так далее. Вам просто нужно указать, что печатать при привязке к типу (при записи тип определяется объектом, который вы передаете).

2 голосов
/ 22 апреля 2012

Вы найдете ответ на свой вопрос в исходном коде https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp Который имеет преобразование BSON в JSON.

В основном, такие вещи, как

  • ObjectId("XXX") -> { "$oid" : "XXX" }
  • /XXX/gi -> { "$regex" : "XXX", "$options" : "gi" }

и так далее ...

1 голос
/ 23 апреля 2018

Я бы предложил использовать методы toJson () и parse (String) в BasicDBObject, поскольку служебный класс JSON был @ Depricated.

import com.mongodb.BasicDBObject;

public static BasicDBObject makeBsonObject(String json) {
    return BasicDBObject.parse(json);
}

public static String makeJsonObject(BasicDBObject dbObj) {
    return dbObj.toJson();
}
1 голос
/ 25 января 2012

Я не уверен насчет java, но в драйвере mongoDB CPP есть тип функции

BSONObj fromjson (строка)

, который возвращает BSONObj в соответствии с переданной строкой,Та же функция должна быть и в Java.

...