Si vous écrivez du code depuis plus d'une semaine, vous avez presque certainement croisé le JSON. On le retrouve partout — réponses d'API REST, fichiers de configuration, documents de base de données, stockage navigateur, journaux. Mais qu'est-ce que c'est exactement, et pourquoi est-il devenu le format qui a envahi le web ?
JSON signifie JavaScript Object Notation. Malgré le nom, il est totalement indépendant du langage et possède des bibliothèques dans tous les grands langages de programmation. Douglas Crockford l'a formalisé au début des années 2000 comme une alternative plus simple à XML pour la communication navigateur–serveur. La spécification est si petite qu'elle tient sur une carte de visite — ce qui explique en partie son succès.
À quoi ressemble réellement du JSON ?
Voici un extrait de JSON qui représente un objet utilisateur. Cet exemple unique couvre les six types de données pris en charge par JSON :
{
"name": "Alice",
"age": 30,
"score": 98.5,
"active": true,
"nickname": null,
"tags": ["developer", "blogger"],
"address": {
"city": "Berlin",
"country": "Germany"
}
}Les six types de données JSON
JSON prend en charge exactement six types de valeurs. C'est tout. Cette simplicité est une fonctionnalité — vous pouvez apprendre tout le format en un après-midi.
{
"string": "Hello, world",
"integer": 42,
"float": 3.14159,
"boolean": true,
"nothing": null,
"array": [1, "two", false, null],
"object": { "nested": true }
}- Chaîne — Tout texte entre guillemets doubles.
"hello","2024-01-01",""sont toutes des chaînes valides. - Nombre — Entier ou à virgule flottante. Aucune distinction entre int et float. Remarque :
NaNetInfinityne sont pas des nombres JSON valides. - Booléen —
trueoufalse, en minuscules uniquement. - Null — Représente « aucune valeur ». Utile pour les champs optionnels non définis.
- Tableau — Une liste ordonnée de valeurs. Peut mélanger les types :
[1, "two", true, null]est parfaitement légal. - Objet — Un ensemble de paires clé–valeur. Les clés doivent être des chaînes entre guillemets doubles.
Une réponse d'API réelle
Voici à quoi pourrait ressembler une vraie réponse d'API REST lors d'un appel à GET /api/users/42.
Remarquez comment elle imbrique objets et tableaux pour représenter des données plus riches :
{
"id": 42,
"username": "alice_dev",
"email": "[email protected]",
"createdAt": "2023-06-15T09:30:00Z",
"preferences": {
"theme": "dark",
"notifications": true,
"language": "en"
},
"roles": ["user", "editor"],
"lastLogin": "2024-01-10T14:22:00Z",
"stats": {
"postsPublished": 27,
"commentsWritten": 154,
"likesReceived": 489
}
}Vous pouvez accéder à la préférence de thème d'alice_dev en JavaScript avec
user.preferences.theme, ou obtenir son premier rôle avec user.roles[0].
Cette correspondance naturelle avec les primitives du langage est précisément ce qui rend JSON si agréable à utiliser.
Règles de syntaxe JSON — Les pièges qui piègent tout le monde
JSON semble simple mais possède quelques règles strictes. Faites-en une mal et toute votre charge utile échoue au parsing. Voici les erreurs que je vois le plus souvent :
- Les clés doivent être entre guillemets doubles.
{"name": "Alice"}est valide.{name: "Alice"}ne l'est pas. Cela surprend les développeurs venant de JavaScript où les clés non-entourées de guillemets sont acceptées. - Pas de virgule finale.
{"a": 1, "b": 2,}lèvera une erreur de parsing. JavaScript est tolérant ici ; la spécification JSON ne l'est pas. - Pas de commentaires. Les commentaires
//ou/* */n'existent pas en JSON. Si vous avez besoin de fichiers de configuration commentés, envisagez YAML ou TOML. - Pas d'
undefined. Leundefinedde JavaScript n'existe pas en JSON. Utiliseznullpour les valeurs manquantes. - Les chaînes doivent utiliser des guillemets doubles. Les chaînes entre guillemets simples comme
{'key': 'value'}sont du JSON invalide. - Pas de zéros en tête.
042est invalide.42ou0.42sont acceptés.
Pourquoi JSON a conquis le web
Avant JSON, XML était roi. Une réponse d'API XML typique était verbeuse, nécessitait un vrai parseur XML, et donnait l'impression de travailler contre le langage. JSON pouvait être parsé par la fonction native JavaScript JSON.parse() — aucune bibliothèque requise. Il était plus léger sur le réseau, lisible en un coup d'œil, et correspondait directement aux objets et tableaux que les développeurs utilisaient déjà chaque jour.
À la fin des années 2000, la plupart des API publiques ont commencé à proposer JSON en parallèle de XML. Au début des années 2010, beaucoup ont totalement abandonné le support XML. Aujourd'hui, l'hypothèse par défaut pour toute API REST est JSON. Même GraphQL, qui a remplacé REST dans de nombreux contextes, utilise toujours JSON comme format de réponse.
JSON est aussi défini par ce qu'il ne prend pas en charge
Certaines des limitations de JSON sont des choix de conception volontaires qui le maintiennent simple et interopérable :
- Pas de type date. Les dates sont simplement des chaînes. La convention est le format ISO 8601 :
"2024-01-15T09:30:00Z". - Pas de données binaires. Les fichiers et images sont généralement encodés en Base64 dans une chaîne.
- Pas de valeurs de fonction.
{"fn": function(){} }est invalide. JSON est purement des données, jamais du code. - Pas de clés en double. Techniquement autorisé par la spécification mais le comportement est indéfini. En pratique, les parseurs prennent la dernière valeur.
Outils utiles pour travailler avec JSON
Voici quelques outils vers lesquels vous vous tournerez constamment en travaillant avec JSON : JSON Formatter pour formater joliment les réponses minifiées, JSON Validator pour trouver les erreurs de syntaxe, JSON Minifier pour compresser JSON en production, et JSON Path pour interroger des données profondément imbriquées sans écrire de boucles.
La spécification officielle se trouve sur json.org et vaut vraiment la lecture — cela prend environ 10 minutes et vous comprendrez complètement le format. La spécification formelle IETF est RFC 8259 si jamais vous devez trancher un débat.
Pour conclure
JSON est un format de données léger et lisible par un humain, basé sur six types de valeurs : chaînes, nombres, booléens, null, tableaux et objets. Il a des règles de syntaxe strictes mais aucune surprise une fois qu'on les connaît. La raison pour laquelle il est devenu omniprésent n'est pas qu'il soit le format le plus puissant — c'est parce qu'il est le plus simple qui couvre 95 % des besoins réels en données. Si vous construisez quelque chose lié au web, comprendre JSON n'est pas optionnel. C'est fondamental.