Crear objetos BSON a partir de cadenas JSON

Tengo una aplicación Java que toma datos de una aplicación externa. Los JSON entrantes están en cadenas. Me gustaría analizar esas cadenas y crear objetos BSON.

Desafortunadamente no puedo encontrar API para eso en la implementación BSON de Java.

¿Tengo un analizador externo para eso como GSON?

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

Esta respuesta muestra cómo usar Jackson para analizar una cadena JSON en un Map .

El controlador oficial de MongoDB Java viene con métodos de utilidad para analizar JSON a BSON y serializar 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-driver/

… Y, desde 3.0.0, puedes:

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

Documentos oficiales:

  • Document.parse (String)
  • Document.toJson ()

Para convertir un string json en bson, haz:

 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, hazlo:

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

Puede que le interese el proyecto bson4jackson , que le permite usar el enlace de datos de Jackson para trabajar con BSON (crear POJO desde BSON, escribir como BSON), especialmente porque Jackson también trabaja con JSON. Por lo tanto, permitirá la conversión como usted menciona, solo use diferentes instancias de ObjectMapper (una que funcione con JSON, otra con BSON).

Con Jackson, puede trabajar con POJO completos (declarar la estructura que desea) o con mapas simples, listas, etc. Solo necesita declarar a qué escribir para vincular cuando lee datos (al escribir, el tipo se define por el objeto que pasa).

Encontrará 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 conversión BSON a JSON.

Básicamente, cosas como

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

y así…

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

BSONObj fromjson (cadena)

que devuelve un BSONObj según la secuencia pasada. Debería haber una misma función en Java también.

Yo sugeriría usar los métodos toJson () y parse (String) del BasicDBObject, porque la clase de la 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(); } 

Utilice Document.parse(String json) desde org.bson.Document . Devuelve el objeto de Document que es tipo de Bson .

    Intereting Posts