🔸13🔸Gestion des fichiers JSON¶
Exemple simple¶
Voici un exemple de programme qui lit un fichier JSON et place son contenu dans une Map
en utilisant la bibliothèque
JSON-simple :
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class LectureJson {
public static void main(String[] args) {
String fichierJson = "fichiers/exemple2.json";
Map<String, String> donnees = new HashMap<>();
try {
// Création du parser JSON
JSONParser parser = new JSONParser();
// Lecture et parsing du fichier JSON
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(fichierJson));
// Conversion du JSONObject en Map
for (Object key : jsonObject.keySet()) {
String cleStr = (String) key;
String valeurStr = (String) jsonObject.get(key);
donnees.put(cleStr, valeurStr);
}
// Affichage du contenu de la Map
for (Map.Entry<String, String> entry : donnees.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
} catch (IOException | ParseException e) {
System.err.println("Erreur lors de la lecture du fichier JSON : " + e.getMessage());
}
}
}
Structure du fichier JSON attendu¶
Le programme attend un fichier JSON simple avec des paires clé-valeur, par exemple :
Points importants¶
Dépendance requise
- Il faut ajouter la bibliothèque
json-simple
au projet[1]
Gestion des types
- Cet exemple suppose que toutes les valeurs sont des chaînes de caractères
- Pour gérer d’autres types, il faudrait adapter la conversion des valeurs
Traitement des erreurs
- Le programme gère les deux types d’exceptions principales :
IOException
pour les erreurs de lectureParseException
pour les erreurs de format JSON
Citations¶
- [1] https://waytolearnx.com/2020/03/lire-un-fichier-json-avec-java.html
- [2] https://stackoverflow.com/questions/443499/convert-json-to-map
- [3] https://www.twilio.com/fr-fr/blog/trois-facons-utiliser-jackson-json-java
- [4] https://www.journaldunet.fr/developpeur/developpement/1203033-comment-parser-un-json-en-java/
- [5] https://jmdoudoux.developpez.com/cours/developpons/java/chap-json-p.php
- [6] https://javarush.com/fr/groups/posts/fr.3970.pause-caf-175-comment-lire-un-fichier-json-en-java–quest-ce-que-le-kit-de-dveloppement-jav
- [7] https://openclassrooms.com/forum/sujet/lire-dans-un-fichier-json-1
- [8] https://developers.google.com/maps/documentation/javascript/importing_data?hl=fr
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 :sauvegarderEnJson
etchargerDeJson
. -
sauvegarderEnJson
(Sérialisation) :public static void sauvegarderEnJson(Personne personne, String cheminFichier)
: Cette méthode prend un objetPersonne
et un chemin de fichier en entrée. Le modificateurpublic static
permet un accès direct sans instanciation de classe. Le type de retourvoid
indique qu’aucune valeur n’est renvoyée.Gson gson = new Gson();
: Instancie un objetGson
.try (FileWriter writer = new FileWriter(cheminFichier))
: Crée unFileWriter
pour é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’objetPersonne
en 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 objetPersonne
désérialisé.Gson gson = new Gson();
: Instancie un objetGson
.try (FileReader reader = new FileReader(cheminFichier))
: Crée unFileReader
pour lire le fichier JSON.return gson.fromJson(reader, Personne.class);
: Désérialise le JSON du fichier en un objetPersonne
et le renvoie.
-
Méthode
main
(Exemple d’utilisation) : La méthodemain
illustre l’utilisation de base : créer un objetPersonne
, le sérialiser en JSON, puis le désérialiser à partir du fichier.System.out.println
confirme 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 uneList
d’objetsPersonne
dans un fichier JSON spécifié parcheminFichier
. Elle utiliseGson.toJson()
pour effectuer la sérialisation. -
chargerListeDeJson(String cheminFichier)
: Cette méthode désérialise uneList
d’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 :
JsonUtilsList
fonctionne avecList<Personne>
, tandis queJsonUtils
fonctionne avec des objetsPersonne
individuels. - Utilisation de TypeToken :
JsonUtilsList
utiliseTypeToken
pour désérialiser correctement les listes.JsonUtils
n’en a pas besoin, car il désérialise vers une classe connue (Personne.class
). - Noms de fichiers : L’exemple d’utilisation dans
JsonUtilsList
utilise “fichiers/personnes.json” tandis queJsonUtils
utilise “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é¶
Note
Page rédigée en partie avec l’aide d’un assistant IA, principalement à l’aide de Perplexity AI, avec le LLM Claude 3.5 Sonnet. 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.