1. Qu’est-ce que JSON (JavaScript Object Notation) ?
JSON (se prononce « djeïson », et non « jéson » !) est l’acronyme de JavaScript Object Notation. Malgré le mot « JavaScript » dans son nom, JSON est un format universel, pris en charge par pratiquement tous les langages de programmation, y compris Java.
JSON a été conçu par Douglas Crockford au début des années 2000 comme un moyen simple d’échanger des données entre le navigateur et le serveur. Avant cela, XML dominait — verbeux et chargé de balises.
JSON s’est révélé plus compact, plus simple et facilement lisible à l’œil. Il est rapidement devenu la norme de facto pour l’échange de données entre client et serveur, en particulier sur le web et dans les applications mobiles.
Pourquoi JSON est-il devenu la norme ?
- Simplicité de la syntaxe — facile à écrire et à lire à la main.
- Compacité — pas de balises superflues ni de « verbiage ».
- Lisibilité — même un non-spécialiste peut comprendre ce qui se passe.
- Facilité d’analyse — la plupart des langages ont des bibliothèques intégrées/de tiers.
- Interopérabilité entre langages — Java, Python, Kotlin, etc. — tous prennent en charge JSON.
- Norme pour les REST API — l’immense majorité des API renvoient du JSON.
Comparaison avec XML
| JSON | XML | |
|---|---|---|
| Lisibilité | Très élevée | Moyenne (beaucoup de balises) |
| Taille | Compacte | Plus volumineux |
| Analyse | Simple | Demande plus d’efforts |
| Extensibilité | Prend en charge l’imbrication | Prend en charge l’imbrication |
| Rigueur | Moins formel | Possibilité de décrire des schémas |
| Popularité (2020+) | Très élevée | Utilisé, mais plus rarement |
JSON l’emporte presque sur tous les points. Néanmoins, XML reste pertinent là où des schémas complexes, un typage strict, une validation via XSD, la prise en charge des commentaires et des attributs sont nécessaires — par exemple dans les anciens systèmes et les logiciels bancaires.
En pratique, si vous n’écrivez pas un logiciel pour une banque ou un vaisseau spatial, utilisez JSON.
2. Syntaxe de base de JSON
Si vous avez déjà travaillé avec des objets JavaScript ou des dictionnaires dans d’autres langages, la syntaxe vous semblera familière. En Java, il n’existe pas de « dictionnaire » direct ; ce rôle est assuré par les collections de java.util, en premier lieu Map<K, V> (le plus souvent — HashMap<K, V>).
Éléments principaux
- Objets — un ensemble de paires « clé : valeur », entourées par { }.
- Tableaux — listes ordonnées de valeurs, entourées par [ ].
Exemple d’objet :
{
"name": "Alice",
"age": 25
}
Exemple de tableau :
[1, 2, 3, 4, 5]
Exemple d’objet avec un tableau :
{
"students": [
"Ivan",
"Maria",
"John"
]
}
Types de valeurs autorisés
En JSON, seuls les types de données suivants sont autorisés :
| Type | Exemple | Description |
|---|---|---|
| Chaîne | |
Toujours entre guillemets doubles |
| Nombre | |
Entiers et décimaux |
| Booléen | |
Valeurs logiques |
| null | |
« Vide », absence de valeur |
| Objet | |
Ensemble de paires « clé : valeur » |
| Tableau | |
Liste de valeurs |
Attention : les clés dans les objets sont toujours des chaînes entre guillemets doubles, par exemple "name". Les guillemets simples ne sont pas autorisés.
Exemples de JSON valide
{
"id": 1,
"name": "Bob",
"active": true,
"scores": [10, 20, 30],
"profile": {
"email": "bob@example.com",
"phone": null
}
}
Exemple de JSON invalide (erreurs)
{
name: 'Bob', // Erreur : les clés et les chaînes — uniquement entre guillemets doubles !
age: 25,
}
3. Structure des données : imbrication d’objets et de tableaux
JSON prend en charge une imbrication profonde : des objets dans des objets, des tableaux dans des objets, des objets dans des tableaux, etc. C’est comme des poupées russes (matriochkas).
Exemple de document JSON complexe
{
"university": "Java University",
"students": [
{
"name": "Ivan",
"age": 20,
"courses": ["Math", "Java", "English"]
},
{
"name": "Maria",
"age": 19,
"courses": ["Biology", "Java", "Art"]
}
],
"active": true
}
L’objet racine contient un champ chaîne "university", un champ booléen "active" et un tableau "students", qui contient des objets représentant des étudiants.
Schéma visuel (organigramme)
{
"clé": valeur,
"tableau": [
{ "clé": valeur },
{ "clé": valeur }
],
"objet": {
"clé": valeur
}
}
4. Avantages de JSON
Pourquoi JSON est-il si populaire ?
- Facilement lisible par l’humain et la machine — la structure est facile à comprendre.
- Compacité — un minimum de caractères superflus.
- Simplicité de l’analyse — de nombreuses bibliothèques pour la lecture/écriture.
- Norme pour les REST API et les applications mobiles — utilisé partout.
- Flexibilité — permet de décrire aussi bien des listes simples que des structures arborescentes.
- Fichiers de configuration, paramètres, stockage des données — souvent utilisé pour la configuration.
- Pris en charge par tous les langages — Java, Python, Go, Rust, etc.
5. Pratique : analyse d’exemples de fichiers JSON
Exemple 1 : liste d’utilisateurs
[
{
"id": 1,
"name": "Alice"
},
{
"id": 2,
"name": "Bob"
}
]
C’est un tableau où chaque élément est un objet utilisateur.
Exemple 2 : configuration d’application
{
"debug": true,
"maxConnections": 100,
"database": {
"host": "localhost",
"port": 5432,
"user": "admin",
"password": "qwerty"
}
}
Un objet avec un objet imbriqué "database". Très proche de paramètres réels d’applications.
Exemple 3 : erreurs dans JSON
{
"name": "Alice",
"age": 25,
} // Erreur : virgule en trop avant l’accolade fermante !
À retenir : en JSON, on ne peut pas mettre de virgule après le dernier élément.
Exemple 4 : clés sans guillemets
{ name: "Alice", age: 25 } // Erreur : les clés doivent être entre guillemets doubles !
6. Nuances utiles
Tableau : ce qui est permis et ce qui ne l’est pas en JSON
| Autorisé | Interdit |
|---|---|
|
|
|
|
|
|
|
|
|
|
Comparaison rapide entre JSON et les objets Java
| Java | JSON |
|---|---|
|
Nombre, true/false |
|
« chaîne » |
| List<T>, tableau | [valeur1, valeur2, ...] |
|
{ "clé": valeur, ... } |
|
null |
| Classe avec des champs | { "champ": valeur, ... } |
Exemple : une classe Java et sa représentation JSON
public class Student {
public String name;
public int age;
}
{
"name": "Alice",
"age": 20
}
7. Erreurs typiques lors de l’utilisation de JSON
Erreur n° 1 : guillemets simples au lieu de doubles. JSON n’accepte que les guillemets doubles pour les clés et les chaînes.
{ 'name': 'Alice' } // Erreur !
Erreur n° 2 : virgule en trop. Il est interdit de mettre une virgule après le dernier élément.
{ "name": "Alice", } // Erreur !
Erreur n° 3 : clés sans guillemets. Les clés doivent toujours être entre guillemets doubles.
{ name: "Alice" } // Erreur !
Erreur n° 4 : nombres avec zéros initiaux. De tels nombres ne sont pas autorisés.
{ "age": 025 } // Erreur !
Erreur n° 5 : utilisation de undefined. En JSON, il n’y a pas de undefined, utilisez null.
{ "value": undefined } // Erreur !
Erreur n° 6 : True/False avec majuscule. En JSON, seuls true et false (en minuscules).
{ "active": True } // Erreur !
GO TO FULL VERSION