MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Deserializzare MongoDB BSON

Per chi fosse interessato, ho trovato la soluzione al mio problema. Si scopre che il formato BSON può essere analizzato proprio come JSON utilizzando driver GSON di Google. L'unica parte difficile che ho dovuto affrontare è stata trovare un modo per archiviare i campi nidificati nella mia classe modello. Il modo per consentire a GSON di analizzare i documenti nidificati consiste nel dichiarare classi interne statiche nella classe del modello. Ecco un esempio:

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
  }

ecc.

Dichiarare la classe del modello seguendo il framework sopra mi ha permesso di analizzare facilmente la formattazione di MongoDB utilizzando alcune righe di codice dalla libreria GSON. Tieni presente che ho concatenato un "\n" a ciascuna voce durante la restituzione dei dati dal mio servizio web in modo da separare ogni documento nella risposta BSON di 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();
}