Cyril Rabat


Utilisation de org.json

 16/10/2015     13/10/2017      Programmation Java      Programmation client/serveur      JSON   

Création, sauvegarde et chargement d'un document JSON avec org.json

   Cet article présente brièvement comment utiliser la bibliothèque org.json pour générer un document JSON, l'afficher à l'écran, le sauvegarder dans un fichier et le relire depuis ce fichier.

Mots-clefs :   Java     JSON   

Cette application utilise la bibliothèque org.json. Le site officiel est le suivant :  documentation Json.

L'archive suivante contient l'ensemble des fichiers de cet article :

 JSON.zip

Classe Personne

Cette classe est utilisée pour illustrer la sérialisation en JSON.

/**
 * Classe représentant une personne.
 * @author Cyril Rabat
 * @version 10/10/2017
 */
public class Personne {
 
    private String nom;
    private String prenom;
    private int age;
 
    /**
     * Constructeur par initialisation.
     * @param nom le nom de la personne
     * @param prenom le prénom de la personne
     * @param age l'âge de la personne
     */
    public Personne(String nom, String prenom, int age) {
        this.nom = nom;
        this.prenom = prenom;
        this.age = age;
    }
 
    /**
     * Récupère le nom de la personne.
     * @return le nom de la personne
     */
    public String getNom() {
        return nom;
    }
 
    /**
     * Récupère le prénom de la personne.
     * @return le prénom de la personne
     */
    public String getPrenom() {
        return prenom;
    }
 
    /**
     * Récupère l'âge de la personne.
     * @return l'âge de la personne
     */
    public int getAge() {
        return age;
    }
 
    /**
     * Convertit l'objet courant en chaîne de caractères.
     * @return la chaîne de caractères
     */
    public String toString() {
        return nom + " " + prenom + " (" + age + "an(s))";
    }
 
}

 Télécharger le fichier

Génération d'un fichier JSON

Ce programme permet de créer un document JSON avec un tableau de personnes. Ce tableau est placé dans un objet, avec la propriété contacts. Pour le sauvegarder dans un fichier, on sauvegarde simplement la chaîne de caractères récupérée depuis l'objet JSONObject.

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.FileWriter;
import java.io.IOException;
 
/**
 * Classe illustrant la sérialisation d'objets en JSON et générant un fichier
 * contenant le JSON obtenu. Le nom du fichier doit être passé en paramètre.
 * @author Cyril Rabat
 * @version 10/10/2017
 */
public class GenerateurJSON {
 
    public static void main(String[] args) {
        // Vérification des arguments
        if(args.length != 1) {
            System.err.println("Erreur : vous devez spécifier le nom du fichier JSON.");
            System.err.println();
            System.err.println("Usage : java GenerateurJSON fichier.json");
            System.err.println("\toù 'fichier.json' est le nom du fichier dans lequel sauvegarder");
            System.exit(-1);
        }
 
        // Génération du JSON depuis un tableau d'objets
        Personne p[] = { new Personne("John", "Smith", 30),
                         new Personne("Cyril", "Rabat", 25) };
        JSONObject objet = new JSONObject();
 
        // Ajout du tableau
        try {
            objet.put("contacts", new JSONArray(p));
        } catch(JSONException e) {
            System.err.println("Erreur lors de l'insertion du tableau.");
            System.err.println(e);
            System.exit(-1);
        }
 
        // Création du fichier de sortie
        FileWriter fs = null;
        try {
            fs = new FileWriter(args[0]);
        } catch(IOException e) {
            System.err.println("Erreur lors de l'ouverture du fichier '" + args[0] + "'.");
            System.err.println(e);
            System.exit(-1);
        }
 
        // Sauvegarde dans le fichier
        try {
            objet.write(fs, 3, 0);
            fs.flush();
        } catch(IOException e) {
            System.err.println("Erreur lors de l'écriture dans le fichier.");
            System.err.println(e);
            System.exit(-1);
        }
 
        // Fermeture du fichier
        try {
            fs.close();
        } catch(IOException e) {
            System.err.println("Erreur lors de la fermeture du fichier.");
            System.err.println(e);
            System.exit(-1);
        }
 
        System.out.println("Le fichier '" + args[0] + "' a été généré.");
    }
}

 Télécharger le fichier

Lecture d'un fichier contenant du JSON

Le programme suivant permet d'ouvrir le fichier dont le nom est passé en paramètre. On lit le contenu du fichier, que l'on place dans une chaîne de caractères. On peut ensuite créer un objet JSONObject à partir de cette chaîne de caractères. Le programme parcourt ensuite les éléments et les affiche à l'écran.

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
 
/**
 * Classe illustrant la lecture de JSON depuis un fichier texte.
 * Le nom du fichier doit être passé en paramètre.
 * @author Cyril Rabat
 * @version 10/10/2017
 */
public class LecteurJSON {
 
    public static void main(String[] args) {
        // Vérification des arguments
        if(args.length != 1) {
            System.err.println("Erreur : vous devez spécifier le nom du fichier JSON.");
            System.err.println();            
            System.err.println("Usage : java LecteurJSON fichier.json");
            System.err.println("\toù 'fichier.json' est le nom du fichier à ouvrir");
            System.exit(-1);
        }
 
        // Ouverture du fichier
        FileInputStream fs = null;
        try {
            fs = new FileInputStream(args[0]);
        } catch(FileNotFoundException e) {
            System.err.println("Fichier '" + args[0] + "' introuvable");
            System.exit(-1);
        }
 
        // Récupération de la chaîne JSON depuis le fichier
        String json = new String();
        Scanner scanner = new Scanner(fs);
        while(scanner.hasNext())
            json += scanner.nextLine();
        scanner.close();
        json = json.replaceAll("[\t ]", "");
 
        // Fermeture du fichier
        try {
            fs.close();
        } catch(IOException e) {
            System.err.println("Erreur lors de la fermeture du fichier.");
            System.err.println(e);
            System.exit(-1);
        }        
 
        // Création d'un objet JSON
        JSONObject objet = new JSONObject(json);
        System.out.println("Contenu JSON : ");
        System.out.println(json);
 
        // Affichage à l'écran
        JSONArray tableau = objet.getJSONArray("contacts");
        System.out.println("Liste des personnes :");
        for(int i = 0; i < tableau.length(); i++) {
            JSONObject element = tableau.getJSONObject(i);
            System.out.print("nom=" + element.getString("nom"));
            System.out.print(", prenom=" + element.getString("prenom"));
            System.out.println(", age=" + element.getInt("age"));
        }
    }
}

 Télécharger le fichier

Compilation et exécution

org.json est téléchargeable au format JAR (une archive Java spécifique). Si vous utilisez un éditeur (Eclipse ou NetBeans), il faut intégrer cette archive au projet. Le reste est automatique. Sinon, il faut spécifier le fichier JAR dans la ligne de commandes. Par exemple :

    javac -cp "json.jar;." GenerateurJSON.java
    java -cp "json.jar;." GenerateurJSON
 

Pour la compilation sous le terminal Linux, il faut utiliser : (deux points) au lieu de ; (point virgule) comme séparateur.

 

Les fichiers sources fournis contiennent des accents. Ajoutez l'option -encoding "utf-8" pour éviter les problèmes d'affichage dans la console.

Une autre solution consiste à renseigner la variable d'environnement CLASSPATH qui indique tous les répertoires contenant les bibliothèques Java utilisées.


Version de cette page Mercredi 16 Décembre 2015

© Cyril Rabat 2018

Connexion

Mot de passe perdu

Dernières nouvelles

20/07/2020 Vous pouvez consulter la page "prérentrée" pour avoir les informations sur les journées de prérentrées en Licence INFO.
16/07/2020 La première phase des inscriptions se termine le 21 juillet. La période pour la deuxième phase est du 19 au 31 août.
25/06/2020 La période pour la phase complémentaire pour la procédure VES est fixée du 10 juillet 2020 au 24 août 2021.
29/05/2020 Le jury de fin d'année aura lieu le jeudi 11 juin, les examens de deuxième session du 22 juin au 3 juillet et le jury de deuxième session le jeudi 16 juillet.

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Facebook :
lien Facebook direct