MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Desserializando o MongoDB BSON


Para os interessados, encontrei a solução para o meu problema. Acontece que o formato BSON pode ser analisado como JSON usando o driver GSON do Google. A única parte complicada com a qual tive que lidar foi descobrir uma maneira de armazenar campos aninhados na minha classe de modelo. A maneira de permitir que o GSON analise documentos aninhados é declarar classes internas estáticas em sua classe de modelo. Aqui está um exemplo:
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 a classe de modelo seguindo a estrutura acima me permitiu analisar facilmente a formatação do MongoDB usando algumas linhas de código da biblioteca GSON. Observe que concatenei um "\n" para cada entrada ao retornar dados do meu webservice para separar cada documento na resposta BSON do 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();
}