2010-06-25 2 views
36

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

Несчастливо Я не могу найти API для этого в реализации BSON Java.

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

+0

Спасибо Хэнк за ответ. Я буду использовать Jakcson, потому что, я думаю, GSON не может отображать карту с объекта. –

+0

Я тоже не мог найти способ сделать это, даже если их 'JsonObject' дает вам способ получить' Set '; Интересно, почему они приняли это конкретное решение. –

ответ

11

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

This answer показывает, как использовать Jackson для разбора строки JSON в Map.

3

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

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

1

Я не уверен, Java, но драйвер MongoDB CPP имеет тип функции

BSONObj fromjson (строка)

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

2

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

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

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

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

36

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

+0

Есть ли альтернатива, доступная для того же самого в C#? –

+0

@ Сонный вопрос о Java, и я не знаю о C#, загляните в источник драйверов Mongo C#, там должны быть утилиты, подобные тем, которые выше – eskatos

+0

круто ... спасибо за ваш ответ. –

8

Чтобы преобразовать строку 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(); 
27

... И, начиная с 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); 

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

Смежные вопросы