Question

J'ai Java application qui utilise les données de l'application externe. JSONs entrants sont dans les chaînes. Je voudrais analyser que les chaînes et créer des objets BSON.

Malheureux, je ne peux pas trouver l'API pour que, dans la mise en œuvre de BSON Java.

Dois-je utiliser l'analyseur externe pour que, comme GSON?

Était-ce utile?

La solution

La façon la plus simple semble être d'utiliser une bibliothèque JSON pour analyser les chaînes JSON dans un Map puis utilisez la balise putAll méthode pour mettre ces valeurs en BSONObject.

Cette réponse spectacles de comment utiliser Jackson pour analyser une chaîne JSON dans un Map.

Autres conseils

officiel MongoDB Driver Java est livré avec des méthodes d'utilité pour l'analyse syntaxique JSON à BSON et sérialisation BSON à JSON.

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

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

Le pilote se trouve ici: https://mongodb.github.io/mongo- java-conducteur /

... Et, depuis 3.0.0, vous pouvez:

import org.bson.Document;

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

Documents officiels:

Pour convertir un JSON de chaîne à BSON, faites:

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

Pour convertir un BSON à JSON, faites:

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

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

Utilisez Document.parse(String json) de org.bson.Document. Elle retourne l'objet Document qui est le type de Bson.

Vous pourriez être intéressé bson4jackson projet, ce qui vous permet d'utiliser des données Jackson au travail de liaison avec BSON (créer POJO de BSON, écrire comme BSON) - d'autant plus que Jackson travaillera également avec JSON. Ainsi, il permettra la conversion comme vous le mentionnez, il suffit d'utiliser différentes instanstaces de ObjectMapper (qui travaille avec JSON, avec d'autres BSON).

Avec Jackson vous pouvez travailler avec POJO plein (structure annoncez que vous voulez) ou avec des cartes simples, listes et ainsi de suite. Vous avez juste besoin de déclarer quoi taper se lier à la lecture des données (lorsque l'écriture, le type est défini par l'objet que vous passez).

Vous trouverez la réponse à votre question dans le code source de https://github.com/mongodb/mongo/blob/master/src/mongo/db/jsobj.cpp Ce qui a le BSON à la conversion JSON.

En fait, des choses comme

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

et ainsi de suite ...

Je suggère d'utiliser les méthodes toJson () et parse (String) du BasicDBObject, parce que la classe utilitaire JSON a été @Depricated.

import com.mongodb.BasicDBObject;

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

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

Je ne suis pas sûr de java mais le pilote du RPC MongoDB a un type de fonction

  

BSONObj fromjson (string)

qui retourne un BSONObj selon la chaîne passée. Il devrait y avoir une même fonction en Java aussi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top