Bibliothèque Java Jackson
Jackson est une bibliothèque de traitement JSON haute performance pour Java, qui peut :
- Sérialiser des objets Java au format JSON (Object → JSON)
- Désérialiser du JSON en objets Java (JSON → Object)
Jackson est devenu l'une des bibliothèques de traitement JSON les plus populaires de l'écosystème Java en raison de sa rapidité, de sa puissance et de sa facilité d'utilisation.
Modules Jackson Core
- 1. Jackson Core : le module principal de Jackson, fournissant des capacités de base d'analyse et de génération JSON.
- 2. Jackson Annotations : contient diverses annotations utilisées pour contrôler le processus de sérialisation et de désérialisation.
- 3. Jackson Databind : fournit une fonctionnalité de liaison de données, permettant la conversion entre des objets Java et JSON.
Utilisation de base
Ajouter une dépendance
Tout d'abord, vous devez ajouter la dépendance Jackson à votre projet (en utilisant Maven comme exemple) :<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</version>
</dependency>
Un exemple simple de conversion entre objets Java et JSON :
Exemple
public class JacksonDemo {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
// Objet Java vers JSON
Person person = new Person("Zhang San", 30);
String json = mapper.writeValueAsString(person);
System.out.println(json);
// JSON vers objet Java
Person parsedPerson = mapper.readValue(json, Person.class);
System.out.println(parsedPerson);
}
}
class Person {
private String name;
private int age;
// Doit avoir un constructeur sans argument
public Person() {}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// Doit avoir des getters et setters
// Omettre les getters/setters et la méthode toString
}
Création d'ObjectMapper
ObjectMapperEst la classe centrale de Jackson, responsable de la sérialisation et de la désérialisation :
ObjectMapper mapper = new ObjectMapper();
Sérialisation JSON (Object → JSON)
Exemple simple
Exemple
private String name;
private int age;
// Omettre le constructeur, les getters et setters
}
Person person = new Person("Zhang San", 25);
String json = mapper.writeValueAsString(person);
System.out.println(json);
// Sortie : {"name":"Zhang San","age":25}
Sortie formatée
Exemple
.writeValueAsString(person);
System.out.println(prettyJson);
/*
Sortie :
{
"name" : "Zhang San",
"age" : 25
}
*/
Désérialisation JSON (JSON → Objet)
Exemple simple
Exemple
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getName()); // Sortie : Li Si
Lecture depuis un fichier
Person person = mapper.readValue(new File("person.json"), Person.class);
Annotations courantes
Jackson fournit diverses annotations pour contrôler le processus de sérialisation et de désérialisation :
@JsonProperty
Spécifiez le nom de la propriété JSON :
@JsonProperty("user_name")
private String name;
@JsonIgnore
Ignorer un certain champ :
@JsonIgnore private String password;
@JsonFormat
Format des dates :
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd") private Date birthDate;
Gestion des types complexes
Types de collections
Exemple
new Person("Wang Wu", 28),
new Person("Zhao Liu", 32)
);
String json = mapper.writeValueAsString(people);
// Sortie : [{"name":"Wang Wu","age":28},{"name":"Zhao Liu","age":32}]
Type Map
Exemple
data.put("name", "Zhang San");
data.put("age", 25);
data.put("isStudent", true);
String json = mapper.writeValueAsString(data);
// Sortie : {"name":"Zhang San","age":30,"isStudent":true}
Fonctionnalités avancées
Sérialisation/désérialisation personnalisée
En héritantJsonSerializeretJsonDeserializerUne logique de sérialisation et de désérialisation personnalisée peut être implémentée.
Gestion des types polymorphes
Utiliser@JsonTypeInfoet@JsonSubTypesAnnotations pour gérer l'héritage et.
Modèle d'arbre
Jackson fournit une API de modèle d'arbre qui permet la manipulation directe des nœuds JSON :
Exemple
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();
Bonnes pratiques
- Réutiliser ObjectMapper: Création
ObjectMapperLes instances sont coûteuses à créer ; la même instance doit être réutilisée - Gérer les exceptions: Toujours les gérer
JsonProcessingExceptionetIOException - Utiliser le patron DTO: Ne sérialisez pas directement les modèles de domaine ; utilisez des objets de transfert de données (DTO) dédiés
- Tenir compte des performances: Pour les scénarios à hautes performances, vous pouvez utiliser
JsonFactorypour les opérations de bas niveau
Résumé
Jackson est un outil puissant pour manipuler JSON en Java, offrant :
- API simple et facile à utiliser
- Capacité de traitement JSON à hautes performances
- Riches options de personnalisation
- Bon support communautaire
Maîtriser Jackson peut grandement améliorer l'efficacité et la flexibilité de la gestion des données JSON dans le développement Java.
Autres extensions
Bibliothèques communes Java