13. Gestion des fichiers JSON¶
Exemple avec com.google.gson.Gson¶
Voici les classes Personne et JsonUtils :
Code Personne
public class Personne {
private String nom;
private int age;
public Personne(String nom, int age) {
this.nom = nom;
this.age = age;
}
// Getters et setters optionnels avec Gson
public String getNom() {
return nom;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Personne{nom='" + nom + "', age=" + age + "}";
}
}
Code JsonUtils
import com.google.gson.Gson;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class JsonUtils {
// Fonction de sérialisation
public static void sauvegarderEnJson(Personne personne, String cheminFichier) throws IOException {
Gson gson = new Gson();
try (FileWriter writer = new FileWriter(cheminFichier)) {
gson.toJson(personne, writer);
}
}
// Fonction de désérialisation
public static Personne chargerDeJson(String cheminFichier) throws IOException {
Gson gson = new Gson();
try (FileReader reader = new FileReader(cheminFichier)) {
return gson.fromJson(reader, Personne.class);
}
}
// Exemple d'utilisation
public static void main(String[] args) {
try {
// Sérialisation
Personne p1 = new Personne("Alice", 30);
sauvegarderEnJson(p1, "fichiers/personne.json");
// Désérialisation
Personne p2 = chargerDeJson("fichiers/personne.json");
System.out.println(p2.getNom() + ", " + p2.getAge());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Le code de la classe utilitaire nommée JsonUtils est conçue pour faciliter la sérialisation et la désérialisation
d’objets Java vers et depuis le format JSON en utilisant la bibliothèque Gson. Ceci est couramment utilisé pour la
persistance des données ou l’échange avec d’autres systèmes.
Composants clés¶
-
Dépendances :
com.google.gson.Gson: la bibliothèque principale gérant la conversion JSON.java.io.*: Fournit des classes pour les opérations d’entrée/sortie de fichiers.
-
Classe
JsonUtils: Cette classe contient deux méthodes principales :sauvegarderEnJsonetchargerDeJson. -
sauvegarderEnJson(Sérialisation) :public static void sauvegarderEnJson(Personne personne, String cheminFichier): Cette méthode prend un objetPersonneet un chemin de fichier en entrée. Le modificateurpublic staticpermet un accès direct sans instanciation de classe. Le type de retourvoidindique qu’aucune valeur n’est renvoyée.Gson gson = new Gson();: Instancie un objetGson.try (FileWriter writer = new FileWriter(cheminFichier)): Crée unFileWriterpour écrire dans le fichier spécifié dans un bloc try-with-resources pour la gestion automatique des ressources.gson.toJson(personne, writer);: Sérialise l’objetPersonneen JSON et l’écrit dans le fichier via lewriter.
-
chargerDeJson(Désérialisation) :public static Personne chargerDeJson(String cheminFichier): Cette méthode prend un chemin de fichier et renvoie un objetPersonnedésérialisé.Gson gson = new Gson();: Instancie un objetGson.try (FileReader reader = new FileReader(cheminFichier)): Crée unFileReaderpour lire le fichier JSON.return gson.fromJson(reader, Personne.class);: Désérialise le JSON du fichier en un objetPersonneet le renvoie.
-
Méthode
main(Exemple d’utilisation) : La méthodemainillustre l’utilisation de base : créer un objetPersonne, le sérialiser en JSON, puis le désérialiser à partir du fichier.System.out.printlnconfirme le processus en affichant le nom et l’âge.
En résumé, JsonUtils fournit une interface simple pour la conversion entre les objets Java et JSON à l’aide de la
bibliothèque Gson. La classe Personne, bien que non affichée, contient vraisemblablement des attributs tels que nom
et âge. La fonctionnalité principale s’articule autour de l’utilisation de Gson pour la sérialisation (toJson) et la
désérialisation (fromJson).
Résultat dans personne.json¶
Résultat reformatté¶
Exemple avec com.google.gson.Gson et une ArrayList¶
Code
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class JsonUtilsList {
// Fonction de sérialisation de la liste
public static void sauvegarderListeEnJson(List<Personne> personnes, String cheminFichier) throws IOException {
Gson gson = new Gson();
try (FileWriter writer = new FileWriter(cheminFichier)) {
gson.toJson(personnes, writer);
}
}
// Fonction de désérialisation de la liste
public static List<Personne> chargerListeDeJson(String cheminFichier) throws IOException {
Gson gson = new Gson();
try (FileReader reader = new FileReader(cheminFichier)) {
// Création d'un Type pour ArrayList<Personne>
Type typeListePersonnes = new TypeToken<ArrayList<Personne>>(){}.getType();
return gson.fromJson(reader, typeListePersonnes);
}
}
// Exemple d'utilisation
public static void main(String[] args) {
try {
// Création d'une liste de personnes
ArrayList<Personne> personnes = new ArrayList<>();
personnes.add(new Personne("Alice", 30));
personnes.add(new Personne("Bob", 25));
personnes.add(new Personne("Charlie", 35));
// Sérialisation
sauvegarderListeEnJson(personnes, "fichiers/personnes.json");
// Désérialisation
List<Personne> personnesChargees = chargerListeDeJson("fichiers/personnes.json");
// Affichage des personnes chargées
for (Personne p : personnesChargees) {
System.out.println(p);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Le code définit une classe utilitaire JsonUtilsList pour sérialiser et désérialiser des listes d’objets Personne
vers et depuis des fichiers JSON en utilisant la bibliothèque Gson. Voici une explication, soulignant les différences
avec JsonUtils:
JsonUtilsList¶
-
sauvegarderListeEnJson(List<Personne> personnes, String cheminFichier): Cette méthode sérialise uneListd’objetsPersonnedans un fichier JSON spécifié parcheminFichier. Elle utiliseGson.toJson()pour effectuer la sérialisation. -
chargerListeDeJson(String cheminFichier): Cette méthode désérialise uneListd’objetsPersonneà partir d’un fichier JSON spécifié parcheminFichier. Il est crucial qu’elle utiliseTypeToken<ArrayList<Personne>>(){}.getType()pour obtenir la représentation correcte du type pour la désérialisation avec Gson. Ceci est nécessaire, car Gson doit connaître le type spécifique de laList(dans ce cas,ArrayList<Personne>) pour désérialiser correctement. -
Méthode
main: Démontre l’utilisation des deux méthodes de sérialisation et de désérialisation. Elle crée une liste d’objetsPersonne, les sérialise dans “fichiers/personnes.json”, puis les désérialise à partir du fichier, affichant les objets chargés.
Principales différences avec JsonUtils¶
- Gestion des listes :
JsonUtilsListfonctionne avecList<Personne>, tandis queJsonUtilsfonctionne avec des objetsPersonneindividuels. - Utilisation de TypeToken :
JsonUtilsListutiliseTypeTokenpour désérialiser correctement les listes.JsonUtilsn’en a pas besoin, car il désérialise vers une classe connue (Personne.class). - Noms de fichiers : L’exemple d’utilisation dans
JsonUtilsListutilise “fichiers/personnes.json” tandis queJsonUtilsutilise “fichiers/personne.json”. Cela reflète la différence de traitement entre les listes et les objets individuels.
En résumé, JsonUtilsList étend les fonctionnalités de JsonUtils pour gérer les collections d’objets Personne, en
utilisant le mécanisme TypeToken nécessaire pour une désérialisation correcte avec Gson.
Résultat dans personnes.json¶
Résultat reformatté¶
Utilisation de l’IA
Page rédigée en partie avec l’aide d’un assistant IA. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.