Bibliothèque Java Jackson

Java 常用类库Bibliothèques communes Java


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) :
<dependency>
    <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

import com.fasterxml.jackson.databind.ObjectMapper;

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

public class Person {
    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

String prettyJson = mapper.writerWithDefaultPrettyPrinter()
                         .writeValueAsString(person);
System.out.println(prettyJson);
/*
Sortie :
{
"name" : "Zhang San",
  "age" : 25
}
*/


Désérialisation JSON (JSON → Objet)

Exemple simple

Exemple

String json = "{\"name\":\"Li Si\",\"age\":30}";
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

List people = Arrays.asList(
    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

Map<String, Object> data = new HashMap<>();
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

JsonNode rootNode = mapper.readTree(json);
String name = rootNode.get("name").asText();
int age = rootNode.get("age").asInt();

Bonnes pratiques

  1. Réutiliser ObjectMapper: CréationObjectMapperLes instances sont coûteuses à créer ; la même instance doit être réutilisée
  2. Gérer les exceptions: Toujours les gérerJsonProcessingExceptionetIOException
  3. 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
  4. Tenir compte des performances: Pour les scénarios à hautes performances, vous pouvez utiliserJsonFactorypour 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.

Java 常用类库Bibliothèques communes Java

Autres extensions