MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Désérialisation de MongoDB BSON

Pour ceux que ça intéresse, j'ai trouvé la solution à mon problème. Il s'avère que le format BSON peut être analysé comme JSON en utilisant le pilote GSON de Google. La seule partie délicate à laquelle j'ai dû faire face était de trouver un moyen de stocker des champs imbriqués dans ma classe de modèle. La façon de permettre à GSON d'analyser les documents imbriqués consiste à déclarer des classes internes statiques dans votre classe de modèle. Voici un exemple :

public BSONObject {
   // Private fields
   private int foo;
   private String bar;

  // Constructors
  public BSONObject() {}

  // Static inner subclasses
  private Widget widget;
  private Duck quack;

  // Getters & Setters for outer class
  public int getFoo() {...}
  public String getBar() {...}
  public Widget getWidget() {...}
  public Duck getDuck() {...}

  // Static inner class declarations
  public static Widget {
     // include vars & getters/setters
  }

etc.

La déclaration de la classe de modèle suivant le cadre ci-dessus m'a permis d'analyser facilement le formatage de MongoDB en utilisant quelques lignes de code de la bibliothèque GSON. Veuillez noter que j'ai concaténé un "\n" à chaque entrée lors du retour des données de mon service Web afin de séparer chaque document dans la réponse BSON de Mongo :

public String getNestedField() {
   Gson gson = new Gson();
   String [] split = response.split("\n");
   JsonParser p = new JsonParser();
   String json = split[0];
   BSONObject b = gson.fromJson(p.parse(json), BSONObject.class);
   return b.getWidget().getField();
}