Qu'est-ce que JSON ?
JSON (JavaScript Object Notation) est un format d'échange de données léger, basé sur du texte, facile à lire et à écrire pour les humains, et simple à analyser et générer pour les machines. Bien que dérivé de la syntaxe JavaScript, JSON est indépendant du langage — pratiquement tous les langages de programmation modernes disposent de bibliothèques pour l'analyser et le produire.
JSON a été introduit par Douglas Crockford au début des années 2000 comme alternative plus simple à XML pour l'échange de données sur le web. Aujourd'hui, c'est le format dominant pour les REST APIs, les fichiers de configuration, les bases de données comme MongoDB, et bien plus encore.
Syntaxe JSON : Le tableau complet
Une valeur JSON est l'un des éléments suivants :
- Objet :
{ "clé": valeur, ... }— une collection non ordonnée de paires clé-valeur - Tableau :
[ valeur, ... ]— une liste ordonnée de valeurs - Chaîne :
"bonjour monde"— doit utiliser des guillemets doubles - Nombre :
42,3.14,-7,1.5e10— pas de distinction entre entier et décimal - Booléen :
trueoufalse - Null :
null
{
"nom": "Alice",
"age": 30,
"actif": true,
"scores": [95, 87, 100],
"adresse": {
"ville": "Paris",
"codePostal": "75001"
},
"notes": null
}
Erreurs de syntaxe courantes
| Erreur | Incorrect | Correct |
|---|---|---|
| Virgule finale | { "a": 1, } |
{ "a": 1 } |
| Guillemets simples | { 'clé': 'val' } |
{ "clé": "val" } |
| Clé sans guillemets | { clé: "val" } |
{ "clé": "val" } |
| Commentaires | { // commentaire } |
(non supporté) |
| Undefined | { "a": undefined } |
Utiliser null ou omettre la clé |
Bref historique de JSON
- 2001 : Douglas Crockford commence à promouvoir JSON comme protocole de communication sans état entre serveur et navigateur
- 2006 : L'IETF publie la RFC 4627, la première spécification formelle de JSON
- 2013 : ECMA International formalise JSON sous la norme ECMA-404
- 2017 : La RFC 8259 remplace toutes les précédentes et devient la norme définitive
Avant JSON, XML dominait la communication entre APIs. La concision de JSON et son adéquation naturelle avec les objets JavaScript en ont fait un succès fulgurant à l'ère du Web 2.0 — une tendance qui n'a fait que s'accélérer.
Où JSON est utilisé
REST APIs
Presque toutes les REST APIs actuelles renvoient du JSON. Une requête à une API météo pourrait donner ceci :
{
"lieu": "Paris",
"temperature": 22.4,
"unite": "celsius",
"conditions": ["nuageux", "humide"],
"previsions": [
{ "jour": "Lundi", "max": 24, "min": 18 },
{ "jour": "Mardi", "max": 21, "min": 16 }
]
}
Fichiers de configuration
Des outils comme ESLint (.eslintrc.json), TypeScript (tsconfig.json) et npm (package.json) utilisent tous JSON pour leur configuration.
Bases de données NoSQL
MongoDB stocke ses documents au format BSON (JSON Binaire). CouchDB, Firebase Firestore et DynamoDB utilisent tous des modèles de documents similaires à JSON.
Stockage local et cookies
Le localStorage du navigateur ne stockant que des chaînes de caractères, les développeurs utilisent couramment JSON.stringify() avant de sauvegarder et JSON.parse() lors de la récupération.
Journalisation et observabilité
La journalisation structurée en JSON facilite considérablement l'interrogation des logs avec des outils comme Elasticsearch, Datadog ou Loki.
L'analyse JSON en pratique
JavaScript / TypeScript
// Convertir une chaîne en objet
const donnees = JSON.parse('{"nom":"Alice","age":30}');
console.log(donnees.nom); // "Alice"
// Sérialiser un objet en chaîne
const json = JSON.stringify({ nom: "Alice", age: 30 }, null, 2);
L'argument optionnel null, 2 de JSON.stringify active le formatage lisible avec 2 espaces d'indentation — indispensable pour le débogage.
Python
import json
# Analyser
donnees = json.loads('{"nom": "Alice", "age": 30}')
print(donnees["nom"]) # Alice
# Sérialiser
texte = json.dumps({"nom": "Alice", "age": 30}, indent=2, ensure_ascii=False)
Go
import (
"encoding/json"
"fmt"
)
type Personne struct {
Nom string `json:"nom"`
Age int `json:"age"`
}
func main() {
var p Personne
json.Unmarshal([]byte(`{"nom":"Alice","age":30}`), &p)
fmt.Println(p.Nom)
}
Sujets avancés
JSON Schema
JSON Schema est un vocabulaire permettant de valider la structure des données JSON. Il permet de définir des champs obligatoires, des types de valeurs, des motifs et des contraintes :
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"nom": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["nom", "age"]
}
JSON Pointer (RFC 6901)
JSON Pointer fournit une syntaxe en chaîne pour identifier une valeur spécifique dans un document JSON :
/nom→ le champnom/scores/0→ premier élément du tableauscores
JSON Patch (RFC 6902)
JSON Patch définit un format pour exprimer une séquence d'opérations à appliquer sur un document JSON — utile pour les mises à jour incrémentielles dans les APIs.
Considérations de performance
- Taille : JSON est textuel et verbeux. Pour les systèmes à haut débit, envisagez des alternatives binaires comme MessagePack ou Protocol Buffers.
- Vitesse d'analyse : Les parseurs JSON modernes (comme simdjson) peuvent analyser des gigaoctets par seconde, mais pour la plupart des applications web, l'analyse JSON n'est pas un goulot d'étranglement.
- Structures très imbriquées : Un emboîtement trop profond peut provoquer des erreurs de débordement de pile dans les parseurs récursifs. Gardez les structures raisonnablement plates lorsque c'est possible.
JSON vs XML vs YAML
| Fonctionnalité | JSON | XML | YAML |
|---|---|---|---|
| Lisibilité | Bonne | Verbeux | Excellente |
| Commentaires | ❌ | ✅ | ✅ |
| Support binaire | ❌ (nécessite base64) | ❌ | ❌ |
| Validation de schéma | JSON Schema | XSD | ❌ (limité) |
| Idéal pour | APIs, config, stockage | Documents, legacy | Fichiers de config |
Bonnes pratiques
- Valider à l'entrée : Ne faites jamais confiance au JSON entrant — validez-le toujours par rapport à un schéma ou vérifiez les champs attendus.
- Utiliser
nullintentionnellement : Distinguez "le champ est absent" de "le champ est explicitement null". - Éviter les structures trop imbriquées : Les données plates sont plus faciles à manipuler. Utilisez des IDs pour lier les objets associés.
- Nommage cohérent des clés : Choisissez une convention (camelCase, snake_case) et respectez-la dans toute votre API.
- Dates en chaînes ISO 8601 : JSON n'a pas de type date. Utilisez le format
"2025-04-09T00:00:00Z"pour garantir l'interopérabilité. - Minifier en production, formater pour le débogage : Utilisez du JSON compact dans les réponses d'API pour réduire la bande passante ; formatez lisiblement en local.
Résumé
JSON est devenu le langage universel de l'échange de données sur le web pour de bonnes raisons : il est simple, lisible et pris en charge partout. Comprendre sa syntaxe, ses limites et ses bonnes pratiques fera de vous un développeur plus efficace — que vous construisiez des APIs, rédigiez des fichiers de configuration ou traitiez des pipelines de données.