MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB BSON deserialisieren

Für Interessierte habe ich die Lösung für mein Problem gefunden. Es stellt sich heraus, dass das BSON-Format genau wie JSON mit Googles GSON-Treiber. geparst werden kann Der einzige knifflige Teil, mit dem ich mich befassen musste, war, einen Weg zu finden, verschachtelte Felder in meiner Vorlagenklasse zu speichern. Um GSON das Analysieren verschachtelter Dokumente zu ermöglichen, müssen Sie statische innere Klassen in Ihrer Vorlagenklasse deklarieren. Hier ist ein Beispiel:

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
  }

usw.

Die Deklaration der Vorlagenklasse nach dem obigen Framework ermöglichte es mir, die Formatierung von MongoDB mit ein paar Codezeilen aus der GSON-Bibliothek einfach zu analysieren. Bitte beachten Sie, dass ich bei der Rückgabe von Daten von meinem Webservice an jeden Eintrag ein „\n“ angehängt habe, um jedes Dokument in Mongos BSON-Antwort zu trennen:

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