web-dev-qa-db-fra.com

Jackson Vs. Gson

Après avoir recherché JSON dans certaines bibliothèques existantes, je me suis finalement retrouvé avec ces deux:

  • Jackson
  • Google GSon

Je suis un peu partial envers GSON, mais Word sur le net indique que GSon souffre d'une certaine performance céleste émission (à partir de septembre 2009).

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

349
Suraj Chandran

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 Json par défaut ' JacksonJsonView '), il était plus naturel pour moi de faire de même. Les 2 lib sont à peu près les mêmes ... à la fin, ils correspondent simplement à un fichier json! :)

Quoi qu'il en soit, comme vous l'avez dit , Jackson a un + en performance et c'est très important pour moi. Le projet est également très actif, comme vous pouvez le constater sur leur page Web et c'est également un très bon signe.

114
mickthompson

Jackson et Gson sont les packages JSON les plus complets Java concernant la prise en charge réelle des liaisons de données. de nombreux autres packages ne fournissent que des liaisons primitives Map/List (ou un modèle d'arborescence équivalent). Les deux prennent également en charge les types génériques, ainsi qu'une configurabilité suffisante pour de nombreux cas d'utilisation courants.

Depuis que je connais mieux Jackson, voici quelques aspects pour lesquels je pense que Jackson bénéficie d’un soutien plus complet que Gson (excuses si je manque une fonction de Gson):

  • Prise en charge étendue des annotations; y compris l'héritage complet et les annotations "mix-in" avancées (associez des annotations à une classe pour les cas où vous ne pouvez pas les ajouter directement)
  • Lecture en continu (incrémentielle), écriture, pour des cas d'utilisation ultra-hautes performances (ou limités en mémoire); peut 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'arborescence (accès de type DOM); peut convertir différents modèles (arborescence <-> Java objet <-> flux)
  • Peut utiliser tous les constructeurs (ou méthodes fabriques statiques), pas seulement le constructeur par défaut
  • Accès aux champs et aux getter/setter (les versions précédentes de gson n'utilisaient que des champs, cela peut avoir changé)
  • Prise en charge JAX-RS prête à l'emploi
  • Interopérabilité: peut également utiliser des annotations JAXB, prend en charge/résout des packages communs (joda, ibatis, cglib), langages JVM (groovy, clojure, scala)
  • Possibilité de forcer le traitement de type statique (déclaré) pour la sortie
  • Prise en charge de la désérialisation des types polymorphes (Jackson 1.5) - possibilité de sérialiser ET de désérialiser des éléments tels que Lister correctement (avec des informations de type supplémentaires)
  • Prise en charge intégrée du contenu binaire (base64 vers/depuis les chaînes JSON)
80
StaxMan

Gson 1.6 inclut maintenant une API de streaming de bas niveau et un nouvel analyseur qui est en réalité plus rapide que Jackson.

37
inder

Ajout aux autres réponses déjà données ci-dessus. Si l'insensibilité à la casse a une importance pour vous, utilisez Jackson. Gson ne prend pas en charge l'insensibilité à la casse pour les noms de clé, 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

12
snegi

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 de service Web reposant à l'aide de spring MVC.

6
raymond.mh.ng