JSON (JavaScript Object Notation) est le format léger qui sert à échanger des données entre un client et un serveur, à configurer des outils et à stocker de l'information structurée. Il repose sur deux structures simples, les objets et les tableaux, lisibles par un humain comme par une machine. Ce guide explique sa syntaxe, comment valider et formater vos données, et les pièges qui invalident un fichier JSON.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- La syntaxe JSON : clés, valeurs, objets et tableaux
- Les six types de données autorisés
- Quand choisir JSON, YAML ou XML
- Comment valider, formater et filtrer du JSON avec
jq - JSON Schema pour valider la structure, et les variantes JSONC et NDJSON
- Les pièges courants qui rendent un JSON invalide
Un format né pour remplacer XML
Section intitulée « Un format né pour remplacer XML »JSON a été formalisé en 2001 par Douglas Crockford comme une alternative légère à XML, alors dominant pour l'échange de données. Là où XML impose un balisage verbeux, JSON se contente d'accolades, de crochets et de guillemets, ce qui réduit la taille des messages et accélère leur traitement.
Son nom vient de JavaScript, dont il reprend la notation littérale des objets. Mais JSON est indépendant de tout langage : aujourd'hui, pratiquement chaque langage de programmation sait le lire et l'écrire nativement. C'est cette universalité qui en a fait le format de référence des API REST et des fichiers de configuration.
JSON est aujourd'hui un standard figé, normalisé par la RFC 8259 et ECMA-404, encodé en UTF-8. Cette stabilité est une force : un document JSON écrit aujourd'hui sera lu de la même façon dans dix ans.
JSON, YAML ou XML : lequel choisir ?
Section intitulée « JSON, YAML ou XML : lequel choisir ? »JSON n'est pas seul. Selon le besoin, YAML et XML restent pertinents. Le bon choix dépend surtout de qui lit le fichier, une machine ou un humain.
| Critère | JSON | YAML | XML |
|---|---|---|---|
| Lisibilité humaine | bonne | excellente | moyenne |
| Verbosité | faible | très faible | élevée |
| Commentaires | non | oui (#) | oui |
| Usage type | API, échange machine | configuration | legacy, documents |
Trois repères simples :
- JSON pour l'échange de données (API REST, réponses serveur) : strict, sans ambiguïté, parsé nativement par tous les langages.
- YAML pour la configuration lue par des humains (Kubernetes, CI/CD, Ansible) : indentation et commentaires le rendent agréable. Bon à savoir : tout JSON valide est aussi du YAML valide.
- XML surtout en legacy, pour SOAP ou les documents exigeant espaces de noms et attributs.
La syntaxe de JSON
Section intitulée « La syntaxe de JSON »Le couple clé-valeur
Section intitulée « Le couple clé-valeur »La brique de base de JSON est la paire clé-valeur. La clé est toujours une chaîne entre guillemets doubles ; la valeur peut être de plusieurs types.
"clé": valeurUn objet complet rassemble plusieurs paires entre accolades :
{ "nom": "Dupont", "age": 35, "estEmploye": true, "adresse": { "ville": "Lyon", "codePostal": "69000" }, "languesParlees": ["français", "anglais", "espagnol"]}Dans cet exemple :
"nom": "Dupont"associe une clé à une chaîne."age": 35associe une clé à un nombre."estEmploye": trueassocie une clé à un booléen."adresse"pointe vers un objet imbriqué."languesParlees"pointe vers un tableau de chaînes.
Les six types de données
Section intitulée « Les six types de données »JSON n'autorise que six types, ce qui le rend prévisible :
- Chaîne : du texte Unicode entre guillemets doubles, par exemple
"Bonjour". - Nombre : entier ou décimal, sans guillemets, par exemple
42ou3.14. - Booléen :
trueoufalse. - null : l'absence de valeur.
- Objet : une collection de paires clé-valeur entre
{}. - Tableau : une liste ordonnée de valeurs entre
[].
Objets et tableaux
Section intitulée « Objets et tableaux »L'objet (entre accolades {}) regroupe des paires clé-valeur non ordonnées. Le tableau (entre crochets []) est une liste ordonnée de valeurs séparées par des virgules :
["pomme", "banane", "cerise"]Un tableau peut mélanger les types et contenir des objets ou d'autres tableaux. C'est en imbriquant objets et tableaux que JSON représente des structures complexes, comme la réponse d'une API listant des utilisateurs et leurs commandes.
Les caractères spéciaux
Section intitulée « Les caractères spéciaux »Certains caractères doivent être échappés avec une barre oblique inverse (\) à l'intérieur d'une chaîne :
{ "citation": "Il dit, \"Bonjour !\"", "chemin": "C:\\Documents\\Nouveau", "ligne": "Première\nSeconde"}Les principaux échappements sont \" (guillemet), \\ (barre oblique inverse), \n (nouvelle ligne) et \t (tabulation). Oublier un échappement casse la chaîne et invalide tout le document.
Valider et formater du JSON
Section intitulée « Valider et formater du JSON »Une seule virgule ou un guillemet manquant rend un fichier JSON inexploitable. Deux réflexes évitent ces blocages : la validation (le JSON est-il syntaxiquement correct ?) et le formatage (est-il lisible ?).
En ligne de commande, l'outil de référence est jq, qui valide, formate et transforme du JSON. La bibliothèque standard de Python fournit aussi un validateur rapide :
# Valide et reformate un fichier (jq)jq . data.json
# Équivalent avec Pythonpython3 -m json.tool data.jsonSi le fichier est invalide, les deux affichent la ligne et la colonne de l'erreur, ce qui accélère le diagnostic. Par exemple, une virgule finale donne parse error: Expected another key-value pair at line 1, column 8. Côté éditeur, VS Code, IntelliJ et la plupart des IDE signalent les erreurs JSON en direct et reformatent à la demande. Pour un contrôle ponctuel, des validateurs en ligne comme JSONLint font le même travail dans le navigateur.
Filtrer et transformer avec jq
Section intitulée « Filtrer et transformer avec jq »jq ne se limite pas à la validation : il filtre et transforme le JSON. Pour extraire un champ ou sélectionner des éléments d'un tableau :
# Extraire une valeurecho '{"nom":"Dupont","langues":["fr","en"]}' | jq -r '.langues[0]'# fr
# Filtrer un tableau (les personnes de plus de 30 ans)echo '[{"nom":"Alice","age":35},{"nom":"Bob","age":25}]' | jq -c '.[] | select(.age > 30)'# {"nom":"Alice","age":35}C'est l'outil de référence pour explorer une réponse d'API en ligne de commande. Le guide manipuler du JSON avec jq détaille sa syntaxe.
JSON dans les API
Section intitulée « JSON dans les API »JSON est le format dominant des API REST. Quand votre navigateur ou une application mobile interroge un serveur, la réponse arrive presque toujours en JSON, sous l'en-tête Content-Type: application/json. Sa structure flexible représente naturellement des entités (un utilisateur, une commande) et leurs relations, et tous les langages savent la désérialiser en objets natifs.
C'est pourquoi un développeur passe une bonne partie de son temps à lire et produire du JSON : réponses d'API, fichiers de configuration (package.json, tsconfig.json), ou logs structurés.
JSON Schema : valider la structure
Section intitulée « JSON Schema : valider la structure »Valider la syntaxe ne suffit pas toujours. Un fichier peut être un JSON correct mais avoir une structure invalide : un champ obligatoire absent, un nombre là où on attend une chaîne. JSON Schema décrit la structure attendue et la vérifie.
{ "type": "object", "properties": { "nom": { "type": "string" }, "age": { "type": "integer", "minimum": 0 } }, "required": ["nom"]}Ce schéma impose que nom soit une chaîne obligatoire et age un entier positif. La version courante en 2026 est le draft 2020-12. Des validateurs l'appliquent : ajv (JavaScript), jsonschema (Python) ou check-jsonschema en ligne de commande. On s'en sert pour fiabiliser des configurations, des payloads d'API ou des données importées.
Les variantes : JSONC, JSON5 et NDJSON
Section intitulée « Les variantes : JSONC, JSON5 et NDJSON »Le JSON standard interdit les commentaires et attend un document unique. Des variantes assouplissent ces règles pour des usages précis :
- JSONC (JSON with Comments) : autorise
//et/* */. Utilisé par les fichiers de configuration de VS Code (settings.json) et toléré danstsconfig.json. - JSON5 : extension plus permissive (commentaires, virgule finale, clés sans guillemets). Pratique pour des fichiers édités à la main.
- NDJSON (Newline Delimited JSON, ou JSON Lines
.jsonl) : un objet JSON par ligne, sans tableau englobant. Idéal pour les logs structurés et le streaming, car on traite chaque ligne sans charger tout le fichier en mémoire.
{"event": "login", "user": "alice"}{"event": "logout", "user": "bob"}Attention : une API stricte rejette JSONC et JSON5. Réservez ces variantes aux fichiers de configuration ou de travail, jamais à l'échange de données.
Pièges courants
Section intitulée « Pièges courants »Ces erreurs invalident un JSON et reviennent sans cesse :
- Virgule finale après le dernier élément d'un objet ou d'un tableau : interdite.
- Guillemets simples : JSON exige des guillemets doubles, pour les clés comme pour les chaînes.
- Commentaires : JSON n'en accepte aucun (
//et/* */sont invalides). - Clé sans guillemets :
age: 35est du JavaScript, pas du JSON ; il faut"age": 35. - Valeurs non supportées :
undefined,NaNou une fonction n'existent pas en JSON.
En cas de doute, passez le fichier dans jq ou python3 -m json.tool : l'erreur pointe la position exacte.
À retenir
Section intitulée « À retenir »- JSON repose sur deux structures : l'objet (
{}) et le tableau ([]). - Les clés et les chaînes sont toujours entre guillemets doubles.
- Seuls six types sont autorisés : chaîne, nombre, booléen, null, objet, tableau.
- La virgule finale est interdite, contrairement à JavaScript.
- Validez et formatez avec
jqoupython3 -m json.tool, qui pointent l'erreur. - JSON est le format standard des API REST (
application/json).
FAQ : questions fréquentes sur JSON
Section intitulée « FAQ : questions fréquentes sur JSON »Le format d'échange du web
JSON (JavaScript Object Notation) est un format texte léger pour échanger et stocker des données structurées. Il est normalisé par la RFC 8259 et ECMA-404, et encodé en UTF-8.Il repose sur deux structures universelles :- l'objet, une collection de paires clé-valeur entre accolades
{}; - le tableau, une liste ordonnée de valeurs entre crochets
[].
Content-Type: application/json) et de nombreux fichiers de configuration.Léger contre verbeux
| JSON | XML | |
|---|---|---|
| Syntaxe | accolades, crochets | balises ouvrantes/fermantes |
| Verbosité | concise | élevée |
| Mapping objets | direct | indirect |
| Usage 2026 | API, web, config | legacy, SOAP, documents |
{"nom": "Dupont"} contre <nom>Dupont</nom> en XML. Il se mappe directement sur les objets des langages, ce qui rend le parsing trivial.XML reste utilisé dans le legacy, les services SOAP et les documents qui exigent des espaces de noms, des attributs ou une validation par schéma riche. Pour un échange de données moderne, JSON est le choix par défaut.Échange contre configuration
| JSON | YAML | |
|---|---|---|
| Structure | accolades/crochets | indentation |
| Commentaires | non | oui (#) |
| Usage | API, échange machine | configuration |
- JSON domine les API et l'échange machine à machine : strict, sans ambiguïté.
- YAML domine les fichiers de configuration (Kubernetes, CI/CD, Ansible) : plus lisible, avec indentation et commentaires.
Non, pas en JSON standard
Le JSON standard (RFC 8259) interdit les commentaires :// et /* */ rendent le document invalide. C'est un choix volontaire pour garder le format simple et sans ambiguïté.Des variantes les autorisent :- JSONC (JSON with Comments) : utilisé par les fichiers de configuration de VS Code (
settings.json) et toléré danstsconfig.json. - JSON5 : extension plus permissive (commentaires, virgule finale, clés sans guillemets).
jq ou python, qui pointent l'erreur
# Valide et reformate (jq)
jq . data.json
# Equivalent avec Python (bibliotheque standard)
python3 -m json.tool data.json
Si le fichier est invalide, les deux affichent la ligne et la colonne exactes de l'erreur :jq: parse error: Expected another key-value pair at line 1, column 8
Côté éditeur, VS Code et la plupart des IDE signalent les erreurs en direct et reformatent à la demande. Pour un contrôle ponctuel, un validateur en ligne comme JSONLint fait le même travail. Pour valider non pas la syntaxe mais la structure (champs requis, types), il faut un JSON Schema.Valider la structure, pas juste la syntaxe
Un document peut être syntaxiquement valide tout en ayant une mauvaise structure (champ manquant, mauvais type). JSON Schema décrit la structure attendue et la valide :{
"type": "object",
"properties": {
"nom": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
},
"required": ["nom"]
}
Ce schéma impose que nom soit une chaîne obligatoire et age un entier positif. La version courante en 2026 est le draft 2020-12.Des validateurs appliquent un schéma : ajv (JavaScript), jsonschema (Python), check-jsonschema (CLI). On les utilise pour valider des configurations, des payloads d'API ou des données importées.Un objet JSON par ligne
NDJSON (Newline Delimited JSON), aussi appelé JSON Lines (extension.jsonl), place un objet JSON complet par ligne, sans tableau englobant :{"event": "login", "user": "alice"}
{"event": "logout", "user": "bob"}
L'intérêt : le traitement en flux, ligne par ligne. On lit et traite chaque enregistrement sans charger tout le fichier en mémoire, ce qui est idéal pour :- les logs structurés ;
- le big data et le streaming ;
- les exports volumineux.
jq traite nativement le NDJSON, et chaque ligne reste un JSON standard valide, parsable indépendamment.