sql >> Base de Datos >  >> NoSQL >> MongoDB

Deserializar MongoDB BSON

Para los interesados, encontré la solución a mi problema. Resulta que el formato BSON se puede analizar como JSON utilizando el controlador GSON de Google . La única parte complicada con la que tuve que lidiar fue encontrar una manera de almacenar campos anidados en mi clase de plantilla. La forma de permitir que GSON analice documentos anidados es declarar clases internas estáticas en su clase de plantilla. Aquí hay un ejemplo:

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.

Declarar la clase de plantilla siguiendo el marco anterior me permitió analizar fácilmente el formato de MongoDB usando unas pocas líneas de código de la biblioteca GSON. Tenga en cuenta que concatené un "\n" a cada entrada cuando devolví datos de mi servicio web para separar cada documento en la respuesta 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();
}