Jackson vs. Gson

Depois de pesquisar algumas bibliotecas existentes para o JSON, finalmente terminei com estas duas:

  • Jackson
  • Google GSon

Eu sou um pouco parcial para GSON, mas a palavra na rede é que GSon sofre de um certo problema de desempenho celestial (a partir de setembro de 2009).

Eu continuo minha comparação; Enquanto isso, estou procurando ajuda para tomar uma decisão.

Eu fiz esta pesquisa na semana passada e acabei com as mesmas 2 bibliotecas. Como estou usando a Spring 3 (que adota Jackson em sua visão Json padrão ‘ JacksonJsonView ‘), era mais natural para mim fazer o mesmo. Os 2 lib são praticamente os mesmos … no final eles simplesmente mapeiam para um arquivo json! 🙂

De qualquer forma, como você disse, Jackson tem um desempenho + e isso é muito importante para mim. O projeto também é bastante ativo, como você pode ver em sua página da web e isso é um sinal muito bom também.

Jackson e Gson são os pacotes Java JSON mais completos em relação ao suporte real à vinculação de dados; muitos outros pacotes fornecem apenas binding primitiva de Mapa / Lista (ou modelo de tree equivalente). Ambos têm suporte completo para tipos genéricos, bem como configuração suficiente para muitos casos de uso comuns.

Desde que eu estou mais familiarizado com Jackson, aqui estão alguns aspectos onde eu acho que Jackson tem mais suporte completo do que Gson (desculpas se eu perder um recurso do Gson):

  • Suporte extenso a annotations; incluindo inheritance completa e annotations “mix-in” avançadas (associar annotations a uma class para casos em que você não pode adicioná-las diretamente)
  • Streaming (incremental) leitura, escrita, para casos de uso de desempenho ultra-alto (ou memory-limitada); pode misturar com binding de dados (sub-trees bind) – EDIT : versões mais recentes do Gson também incluem leitor de streaming
  • Modelo de tree (access semelhante ao DOM); pode converter entre vários modelos (tree <-> java object <-> stream)
  • Pode usar quaisquer construtores (ou methods de fábrica estáticos), não apenas o construtor padrão
  • Campo e access getter / setter (versões anteriores do gson apenas utilizavam campos, isso pode ter mudado)
  • Suporte JAX-RS pronto para uso
  • Interoperabilidade: também pode usar annotations JAXB, possui suporte / solução alternativa para pacotes comuns (joda, ibatis, cglib), linguagens JVM (groovy, clojure, scala)
  • Capacidade de forçar o tratamento do tipo estático (declarado) para saída
  • Suporte para desserializar tipos polimórficos (Jackson 1.5) – pode serializar e desserializar coisas como Listar corretamente (com informações de tipo adicionais)
  • Suporte integrado para conteúdo binário (base64 to / from JSON Strings)

O Gson 1.6 agora inclui uma API de streaming de baixo nível e um novo analisador que é realmente mais rápido que o Jackson.

Adicionando a outras respostas já dadas acima. Se a insensibilidade do caso é de alguma importância para você, use Jackson. O Gson não suporta insensibilidade a maiúsculas e minúsculas para nomes de chaves, enquanto o jackson faz isso.

Aqui estão dois links relacionados

(Não) Suporte a sensibilidade de maiúsculas e minúsculas em Gson: GSON: Como obter um elemento insensível a maiúsculas e minúsculas de Json?

Suporte a maiúsculas e minúsculas em Jackson https://gist.github.com/electrum/1260489

Parece que o GSon não suporta o JAXB. Usando a class anotada JAXB para criar ou processar a mensagem JSON, posso compartilhar a mesma class para criar a interface do Serviço Web Restful usando o Spring MVC.