2010-06-25 30 views
36

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.Creación de objetos BSON a partir de la cadena JSON

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

¿Tengo un analizador externo de uso para eso como GSON?

+0

darle las gracias Hank por respuesta. Usaré Jakcson porque, creo que GSON no puede organizar el mapa de un objeto. –

+0

No pude encontrar una manera de hacer eso tampoco, a pesar de que su 'JsonObject' te da una manera de obtener un' Set '; Me pregunto por qué tomaron esa decisión en particular. –

Respuesta

11

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 método putAll poner esos valores en un BSONObject.

This answer muestra cómo usar Jackson para analizar una cadena JSON en un Map.

3

Puede que le interese el proyecto bson4jackson, que le permite usar el enlace de datos 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 usted puede trabajar con POJOs completos (declarar la estructura que desea) o con mapas listas simples, y así sucesivamente. Solo necesita declarar a qué escribir para vincular cuando lee datos (al escribir, el tipo se define por el objeto que pasa).

1

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. Debería haber una misma función en Java también.

36

Oficial MongoDB Java controlador 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/

+0

¿hay alguna alternativa disponible para el mismo en C#? –

+0

@Sunny esta pregunta es sobre Java y no sé sobre C#, mire en la fuente del controlador Mongo C#, debe haber métodos de utilidad como los de más arriba – eskatos

+0

genial ... gracias por su respuesta. –

8

Para convertir un JSON cadena 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(); 
27

... Y, desde 3.0.0, se puede:

import org.bson.Document; 

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

documentos oficiales:

Cuestiones relacionadas