/ / Criando objeto BSON a partir da string JSON - java, json, mongodb, bson

Criando objeto BSON a partir da string JSON - java, json, mongodb, bson

Eu tenho o aplicativo Java que coleta dados do aplicativo externo. JSONs de entrada estão em Strings. Eu gostaria de analisar esse Strings e criar objetos BSON.

Infelizmente eu não consigo encontrar API para isso na implementação BSON do Java.

Eu uso analisador externo para isso como GSON?

Respostas:

11 para resposta № 1

A maneira mais fácil parece ser usar uma biblioteca JSON para analisar as strings JSON em um Map e depois usar o putAll método para colocar esses valores em um BSONObject.

Esta resposta mostra como usar Jackson para analisar uma string JSON em um Map.


37 para resposta № 2

O Official MongoDB Java Driver vem com métodos utilitários para analisar JSON para BSON e serializar BSON para JSON.

import com.mongodb.DBObject;
import com.mongodb.util.JSON;

DBObject dbObj = ... ;
String json = JSON.serialize( dbObj );
DBObject bson = ( DBObject ) JSON.parse( json );

O driver pode ser encontrado aqui: https://mongodb.github.io/mongo-java-driver/


31 para resposta № 3

... E desde 3.0.0, você pode:

import org.bson.Document;

final Document doc = new Document("myKey", "myValue");
final String jsonString = doc.toJson();
final Document doc = Document.parse(jsonString);

Documentos oficiais:


8 para resposta № 4

Para converter uma string json para bson, faça:

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);

Para converter um bson para json, faça:

import org.bson.BasicBSONDecoder;
import org.bson.BSONObject;

BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(out);
String json_string = bsonObject.toString();

3 para resposta № 5

Você pode estar interessado em bson4jackson projeto, que permite usar dados de Jacksonligação para trabalhar com BSON (criar POJOs da BSON, escreva como BSON) - especialmente porque Jackson também trabalha com JSON. Então, ele permitirá a conversão como você menciona, apenas use diferentes instanstaces do ObjectMapper (um que funcione com o JSON, outro com o BSON).

Com Jackson você pode trabalhar com POJOs completos(declare a estrutura que você quer) ou com mapas simples, listas e assim por diante. Você só precisa declarar o que digitar para vincular ao ler dados (ao escrever, o tipo é definido pelo objeto que você passa).


2 para resposta № 6

Você encontrará a resposta para sua pergunta no código fonte do https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp Qual tem a conversão de BSON para JSON.

Basicamente, coisas como

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

e assim por diante...


1 para resposta № 7

Eu não tenho certeza sobre java, mas o driver CPP mongoDB tem um tipo de função

BSONObj fromjson (string)

que retorna um BSONObj de acordo com a string passada. Deve haver uma mesma função em Java também.


1 para resposta № 8

Sugiro usar os métodos toJson () e parse (String) do BasicDBObject, porque a classe do utilitário JSON foi @Depricated.

import com.mongodb.BasicDBObject;

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

public static String makeJsonObject(BasicDBObject dbObj) {
return dbObj.toJson();
}

0 para a resposta № 9

Usar Document.parse(String json) a partir de org.bson.Document. Devolve Document objeto que é o tipo de Bson.