Pergunta

Estou fazendo um uso bastante pesado do JSON Parsing em um aplicativo que estou escrevendo. A maior parte do que fiz já foi implementada usando a Biblioteca JsonObject embutida do Android (é JSON-Lib?).

O JsonObject parece criar instâncias de absolutamente tudo na sequência JSON ... mesmo que eu não acabe usando todos eles.

Meu aplicativo atualmente funciona muito bem, mesmo em um G1.

Minha pergunta é a seguinte: a velocidade e a memória se beneficiam do uso de um analisador de fluxo como Jackson vale todo o problema?

Por problemas, quero dizer o seguinte: até onde eu sei, há três desvantagens para usar Jackson em vez da biblioteca embutida:

  1. Dependência de uma biblioteca externa. Isso torna o seu .apk maior no final. Não é um grande negócio.
  2. Seu aplicativo é mais frágil. Como a análise não é feita automaticamente, é mais vulnerável a mudanças no texto JSON que está analisando (talvez eu esteja errado sobre isso).
  3. Escrever o código para analisar o JSON por um analisador de riachos é feio e tedioso.
Foi útil?

Solução

Acho que você praticamente respondeu sua própria pergunta. :)
Usando o analisador JSON embutido e nunca procurei uma alternativa.

EDIT: Agora estou usando um embalagem fino baseado em anotação de DroidParts.

Outras dicas

Também estou usando o analisador JSON Build-in na maioria dos casos, mas recentemente entrei em um cenário em que não se encaixa: para algumas solicitações de serviço da Web, recebo documentos JSON de mais de 1 MB. Carregá-los com o analisador JSON de construção requer quantidades tremendas da memória principal e resultou em OutOfMemoryException várias vezes. Para esses cenários, um analisador de streaming é a melhor escolha (mesmo que seja mais inconveniente em uso) e o analisador JSON embutido não fornece streaming, mas apenas o estilo DOM.

Para quem procura um analisador JSON de streaming para Android, posso recomendar fortemente usar GSON do Google. Eu tentei Jackson JSON no começo e funcionou bem até que eu tentei criar a versão de lançamento do meu aplicativo: o ProGuard relatou vários problemas e o aplicativo em execução caiu com misterioso NullPointerException no construtor de Jackson ObjectMapper (Embora tudo funcionasse bem na versão de depuração). Mesmo depois de algumas horas tentando, não consegui consertar isso. Então mudei para o GSON e tudo funcionou como um encanto.

BTW: O frasco de streaming do GSON tem um tamanho de apenas 14kb-então nada com que realmente se preocupar.

Eu acho que a pergunta é se um embutido é bom o suficiente. Se for, claro, minimizar as dependências geralmente é uma boa estratégia. Bom o suficiente pode se referir à eficiência e à facilidade de uso.

Pelo que vale a pena, Jackson também possui um modelo de árvore decente, bem como a ligação completa dos dados. O modelo de árvore é significativamente mais rápido que o analisador padrão (a análise é 3x-5x mais rápida no J2SE, provavelmente da mesma forma em outras plataformas como o Android, o próprio modelo de árvore também é provavelmente mais eficiente). Ou: se você não deseja dependência do segundo frasco (o Mapper é necessário para o modelo de árvore e a ligação de dados), escrever sua própria árvore para cobrir seus casos de uso também é simples. Use o hashmap básico/arraylist/wrappers ou tenha suas próprias aulas, se preferir. O construtor seria talvez 40 linhas de código superior.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top