Domanda

Non ho Java app che prende i dati da applicazioni esterne. JSONs in arrivo sono in stringhe. Vorrei analizzare che le stringhe e creare oggetti BSON.

Unfortunate non riesco a trovare API per che nella implementazione BSON di Java.

Devo usare parser esterna per che, come GSON?

È stato utile?

Soluzione

Il modo più semplice sembra essere quella di utilizzare una libreria JSON per analizzare le stringhe JSON in un Map e quindi utilizzare il putAll metodo per mettere quei valori in un BSONObject.

spettacoli questa risposta come utilizzare Jackson per analizzare una stringa JSON in un Map.

Altri suggerimenti

driver ufficiale MongoDB Java è dotato di metodi di utilità per l'analisi JSON per BSON e serializzazione 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 );

Il driver può essere trovato qui: https://mongodb.github.io/mongo- java-pilota /

... E, dal momento 3.0.0, è possibile:

import org.bson.Document;

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

documentazione ufficiale:

Per convertire una stringa in JSON BSON, fare:

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

Per convertire un BSON a JSON, fare:

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

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

Usa Document.parse(String json) da org.bson.Document. Esso restituisce oggetto Document che è il tipo di Bson.

Si potrebbe essere interessato bson4jackson progetto, che consente di utilizzare i dati Jackson legame con il lavoro con BSON (creare POJO da BSON, scrittura come BSON) - soprattutto perché Jackson anche il lavoro con JSON. Così sarà consentire la conversione come si parla, basta utilizzare diversi instanstaces ObjectMapper (uno che funziona con JSON, altri con BSON).

Con Jackson si può lavorare con POJO completo (struttura dichiarare che si desidera) o con semplici mappe di liste e così via. Hai solo bisogno di dichiarare cosa digitare per l'associazione a quando la lettura dei dati (in cui la scrittura, il tipo è definito da oggetto si passa).

Troverete la risposta alla tua domanda nel codice sorgente di https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp Che ha il BSON alla conversione JSON.

In sostanza, cose del genere

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

e così via ...

Io suggerirei di usare il toJSON () e analizzare i metodi (String) della BasicDBObject, perché la classe di utilità JSON è stato @Depricated.

import com.mongodb.BasicDBObject;

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

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

Non sono sicuro su Java ma il conducente MongoDB CPP ha un tipo di funzione

  

BSONObj fromjson (stringa)

che restituisce un BSONObj in base alla stringa passata. Ci dovrebbe essere una stessa funzione in Java anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top