Jackson vs Gson: Cas limites dans l’analyse JSON pour les applications Java

JSON (Javascript Object Notation) est une collection de paires clé-valeur qui peuvent être facilement analysées et générées par des applications. C’est un sous-ensemble de la norme de langage de programmation JavaScript ECMA-262. L’analyse de JSON est nécessaire dans la plupart des applications, telles que les API RESTful ou les applications nécessitant une sérialisation des données. 

Dans l’écosystème Java, les deux bibliothèques les plus populaires pour la manipulation des données JSON sont Jackson et Gson. Les deux sont largement utilisés et offrent des avantages uniques. Cet article utilise des exemples de cas limites pour explorer les fonctionnalités des deux bibliothèques sur différents paramètres.

Vue d’ensemble de Jackson et Gson

Jackson

Jackson a été développé par FasterXML et est utilisé dans des applications et des frameworks d’entreprise tels que Spring Boot. Il offre l’analyse, la sérialisation et la désérialisation des données JSON. Les fonctionnalités suivantes rendent cette bibliothèque populaire parmi les développeurs :

  1. Jackson est la bibliothèque de traitement JSON par défaut dans Spring Boot, ce qui élimine la configuration manuelle dans la plupart des cas.
  2. Il facilite la désérialisation JSON en types génériques en utilisant TypeReference ou JavaType.
  3. Il fournit différentes annotations pour personnaliser le comportement de la sérialisation et de la désérialisation. Par exemple, @JsonProperty(name) rend la correspondance entre la clé entrante et le champ Java POJO réel transparente.
  4. Il offre un support étendu et robuste pour la liaison de données bidirectionnelle (JSON vers POJO et vice versa), l’API de streaming (l’API lit le JSON dans POJO) et l’analyse du modèle arborescent (une carte en mémoire des objets JSON).
  5. La bibliothèque Jackson offre des performances élevées grâce à la minimisation de la surcharge mémoire et l’optimisation de la sérialisation/désérialisation (du JSON vers POJO et vice versa).
  6. Jackson prend en charge des modules supplémentaires tels que le traitement XML, YAML et les améliorations spécifiques à Kotlin, Scala.
  7. Les annotations telles que @JsonTypeInfo et @JsonSubTypes gèrent les types polymorphes.
  8. Il gère les champs manquants ou supplémentaires dans les données JSON en raison de sa compatibilité ascendante et descendante.
  9. Jackson prend en charge les objets immuables et les classes avec des constructeurs, y compris ceux utilisant des motifs de construction.
  10. La classe ObjectMapper est thread-safe et permet donc une utilisation efficace dans les applications multithreadées.

Gson

Gson a été développé par Google et conçu pour convertir le JSON en objets Java (POJO) et vice versa. Il est simple et idéal pour les petites applications nécessitant des mises en œuvre rapides. Cette bibliothèque open-source offre les fonctionnalités clés suivantes:

  1. Gson a des dépendances externes minimales; il est donc facile à intégrer.
  2. Il prend en charge les objets imbriqués et les types de données complexes tels que les listes, les maps et les classes personnalisées.
  3. Il peut désérialiser du JSON en collections génériques comme List<T>, Map<K,V> en utilisant TypeToken.
  4. Les interfaces JsonSerializer et JsonDeserializer de la bibliothèque Gson permettent une implémentation personnalisée.
  5. Les valeurs nulles sont exclues par défaut dans la sortie JSON, et si nécessaire, les valeurs nulles peuvent être incluses dans la sortie.
  6. Les annotations @SerializedName associent les clés JSON aux champs Java avec des noms différents.
  7. Les objets Gson sont thread-safe et peuvent donc être utilisés dans des applications multi-thread.
  8. La classe GsonBuilder peut appliquer des politiques de nommage personnalisées pour les champs. Par exemple, FieldNamingPolicy.IDENTITY est la politique par défaut, ce qui signifie que le nom du champ reste inchangé.

Cas particuliers pris en compte dans cette comparaison

Feature Jackson GSON

Champs supplémentaires

Ignorés par défaut, configurables.

Ignorés par défaut.

Valeurs nulles

Prise en charge de @JsonInclude.

Requiert .serializeNulls().

Références circulaires

Pris en charge en utilisant @JsonIdentityInfo.

Non pris en charge directement.

Gestion des données

Prend en charge l’API de date Java 8 avec des modules.

Requiert des adaptateurs de type personnalisés.

Polymorphisme

Intégré avec @JsonTypeInfo.

Nécessite une logique de désérialisation personnalisée.

Le JSON d’entrée considéré pour la comparaison avec les bibliothèques Jackson et Gson est présent sur GitHub.

La représentation de la classe modèle du JSON se trouve sur GitHub.

Implémentation Jackson

Le JSON ci-dessus est converti en un objet Java en utilisant les bibliothèques Jackson ci-dessous :

XML

 

Classe de parsing JSON principale en utilisant la bibliothèque Jackson :

Java

 

La sortie de la classe ci-dessus est la suivante :

Implémentation Gson

La dépendance Gson utilisée pour convertir le JSON ci-dessus en un objet Java est la suivante :

XML

 

Parcours JSON en utilisant la bibliothèque GSON principale :

Java

 

La sortie de la classe principale ci-dessus est la suivante :

Lequel Devrais-je Choisir ?

Jackson offre de hautes performances ; par conséquent, il doit être utilisé lorsque les projets impliquent des structures de données complexes ou de grands ensembles de données, tandis que Gson doit être utilisé lorsque les ensembles de données sont plus petits et que la structure de données est simple.

Conclusion

Les deux bibliothèques peuvent gérer efficacement l’ensemble de données ci-dessus et sont excellentes pour le traitement du parsing JSON en JAVA. La comparaison mentionnée ci-dessus aide à choisir la bonne bibliothèque en fonction des exigences du projet.

Les extraits de code mentionnés ci-dessus sont disponibles dans le dépôt GitHub.

Une comparaison détaillée entre Jackson et Gson est disponible sur Baeldung. La documentation officielle de Jackson offre des informations approfondies sur les fonctionnalités et la configuration de Jackson. De même, la documentation officielle de Gson fournit un guide d’implémentation détaillé.

Source:
https://dzone.com/articles/jackson-vs-gson-edge-cases-json-parsing-java