Pregunta

Tengo Java aplicación que toma los datos de aplicación externa. JSONs entrantes están en Cuerdas. Me gustaría analizar que las cadenas y crear objetos BSON.

Lamentable no puedo encontrar la API para que, en aplicación BSON de Java.

¿Tengo que usar analizador externo para que al igual que GSON?

¿Fue útil?

Solución

La forma más fácil parece ser el uso de una biblioteca JSON para analizar las cadenas JSON en un Map y luego usar el putAll método para poner esos valores en un BSONObject.

muestra esta respuesta cómo utilizar Jackson para analizar una cadena JSON en un Map.

Otros consejos

Oficial MongoDB Java controlador viene con métodos de utilidad para analizar JSON para BSON y la serialización BSON a JSON.

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

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

El controlador se puede encontrar aquí: https://mongodb.github.io/mongo- java-conductor /

... Y, desde 3.0.0, es posible:

import org.bson.Document;

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

documentos oficiales:

Para convertir una cadena JSON a BSON, hacer:

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 convertir un BSON a JSON, hacer:

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

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

El uso de Document.parse(String json) org.bson.Document. Devuelve objeto Document que es tipo de Bson.

Quizás se encuentre interesado en bson4jackson , lo que le permite utilizar los datos de Jackson se une a trabajos con BSON (crear POJOs de BSON, escribir como BSON) - especialmente desde que Jackson también trabajo con JSON. Por lo tanto, permitirá la conversión al igual que lo mencionas, sólo tiene que utilizar diferentes instanstaces ObjectMapper (que funciona con JSON, otros con BSON).

Con Jackson que puede trabajar con POJOs completo (estructura declarar que desea) o con mapas listas simples, y así sucesivamente. Sólo tiene que declarar qué tipo de unirse a al leer los datos (cuando la escritura, el tipo se define por objeto que pase).

Encontrarás la respuesta a su pregunta en el código fuente de https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp Que tiene la BSON a la conversión de JSON.

Básicamente, cosas por el estilo

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

y así sucesivamente ...

I sugeriría usando el toJson () y de análisis sintáctico (String) métodos de la BasicDBObject, porque la clase de utilidad JSON ha sido @Depricated.

import com.mongodb.BasicDBObject;

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

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

No estoy seguro acerca de Java, pero el conductor mongodb CPP tiene un tipo de función

  

BSONObj fromjson (cadena)

que devuelve un BSONObj acuerdo con la cadena pasada. Debe haber una misma función en Java también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top