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 la API para eso en la implementación BSON de Java.
¿Tengo uso de analizador externo para eso como GSON?
Respuestas
11 para la respuesta № 1La forma más fácil parece ser usar una biblioteca JSON para analizar las cadenas JSON en un Map
y luego usar el putAll
método para poner esos valores en una BSONObject
.
Esta respuesta muestra cómo usar Jackson para analizar una cadena JSON en una Map
.
37 para la respuesta № 2
El controlador Java oficial de MongoDB 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/
31 para la respuesta № 3
... 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:
8 para la respuesta № 4
Para convertir una cadena json a 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, haz:
import org.bson.BasicBSONDecoder;
import org.bson.BSONObject;
BasicBSONDecoder decoder = new BasicBSONDecoder();
BSONObject bsonObject = decoder.readObject(out);
String json_string = bsonObject.toString();
3 para la respuesta № 5
Te podría interesar bson4jackson proyecto, que le permite utilizar los datos de JacksonEnlace para trabajar con BSON (crear POJOs desde BSON, escribir como BSON), especialmente porque Jackson también trabaja con JSON. Así que permitirá la conversión como usted menciona, solo use diferentes instanstaces ObjectMapper (una que funciona con JSON, otra con BSON).
Con Jackson puedes trabajar con POJOs completos(declare la estructura que desee) o con mapas simples, listas, etc. Solo tiene que declarar qué escribir para enlazar al leer datos (al escribir, el tipo se define por el objeto que pasa).
2 para la respuesta № 6
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 de BSON a JSON.
Básicamente, cosas como
ObjectId("XXX")
->{ "$oid" : "XXX" }
/XXX/gi
->{ "$regex" : "XXX", "$options" : "gi" }
y así...
1 para la respuesta № 7
No estoy seguro de java pero el controlador CPP mongoDB tiene un tipo de función
BSONObj fromjson (cadena)
que devuelve un BSONObj de acuerdo con la cadena pasada. Debería haber una misma función en Java también.
1 para la respuesta № 8
Yo sugeriría usar los métodos toJson () y parse (String) del objeto BasicDBO, 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();
}
0 para la respuesta № 9
Utilizar Document.parse(String json)
de org.bson.Document
. Vuelve Document
objeto que es tipo de Bson
.