Jackson Vs. Gson

Après avoir parcouru certaines bibliothèques existantes pour JSON, j’ai finalement fini avec ces deux:

  • Jackson
  • Google GSon

Je suis un peu partial envers GSON, mais le mot sur le net est que GSon souffre d’un certain problème de performance céleste (en septembre 2009).

Je continue ma comparaison; en attendant, je cherche de l’aide pour me décider.

J’ai fait cette recherche la semaine dernière et je me suis retrouvé avec les mêmes 2 bibliothèques. Comme j’utilise Spring 3 (qui adopte Jackson dans sa vue par défaut Json ” JacksonJsonView “), il était plus naturel que je fasse de même. Les 2 Lib sont à peu près les mêmes … à la fin, ils sont simplement mappés sur un fichier json! 🙂

En tout cas, comme vous l’avez dit, Jackson a une performance de + et c’est très important pour moi. Le projet est également très actif, comme vous pouvez le voir sur sa page Web, et c’est également un très bon signe.

Jackson et Gson sont les packages Java JSON les plus complets concernant la prise en charge de la liaison de données. de nombreux autres packages ne fournissent qu’une liaison primitive Map / List (ou modèle d’arbre équivalent). Les deux ont un support complet pour les types génériques, ainsi qu’une configurabilité suffisante pour de nombreux cas d’utilisation courants.

Comme je suis plus familier avec Jackson, voici quelques aspects où je pense que Jackson a un support plus complet que Gson (excuses si je manque une fonctionnalité de Gson):

  • Support d’annotation étendu; y compris l’inheritance complet et les annotations avancées de “mix-in” (associez les annotations à une classe pour les cas où vous ne pouvez pas les append directement)
  • Lecture en continu (incrémentielle), écriture, pour des cas d’utilisation ultra-performants (ou limités en mémoire); peut se mélanger avec la liaison de données (lier des sous-arbres) – EDIT : les dernières versions de Gson incluent également un lecteur de streaming
  • Modèle d’arbre (access de type DOM); peut convertir entre différents modèles (arbre < -> object java < -> stream)
  • Peut utiliser n’importe quel constructeur (ou méthode de fabrique statique), pas seulement le constructeur par défaut
  • Accès aux champs et aux getter / setter (les versions précédentes de gson utilisaient uniquement les champs, cela peut avoir changé)
  • Prise en charge de JAX-RS prête à l’emploi
  • Interopérabilité: peut également utiliser des annotations JAXB, prend en charge / contourne les paquets courants (joda, ibatis, cglib), les langages JVM (groovy, clojure, scala)
  • Possibilité de forcer un traitement de type statique (déclaré) pour la sortie
  • Prise en charge de la désérialisation des types polymorphes (Jackson 1.5) – peut sérialiser et désérialiser des choses comme la liste correctement (avec des informations de type supplémentaires)
  • Prise en charge intégrée du contenu binary (base64 vers / depuis les chaînes JSON)

Gson 1.6 inclut désormais une API de streaming de bas niveau et un nouvel parsingur plus rapide que Jackson.

Ajout à d’autres réponses déjà données ci-dessus. Si l’insensibilité à la situation est importante pour vous, utilisez Jackson. Gson ne prend pas en charge l’insensibilité à la casse pour les noms de clés, contrairement à Jackson.

Voici deux liens connexes

(Non) Prise en charge de la sensibilité à la casse dans Gson: GSON: Comment obtenir un élément insensible à la casse de Json?

Prise en charge de la sensibilité à la casse dans Jackson https://gist.github.com/electrum/1260489

Il semble que GSon ne supporte pas JAXB. En utilisant la classe annotée JAXB pour créer ou traiter le message JSON, je peux partager la même classe pour créer l’interface Restful Web Service à l’aide de Spring MVC.