Aller au contenu
Développement medium

Tout savoir sur JSON, syntaxe et usages

11 min de lecture

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.

  • 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

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 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èreJSONYAMLXML
Lisibilité humainebonneexcellentemoyenne
Verbositéfaibletrès faibleélevée
Commentairesnonoui (#)oui
Usage typeAPI, échange machineconfigurationlegacy, 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 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é": valeur

Un 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": 35 associe une clé à un nombre.
  • "estEmploye": true associe une clé à un booléen.
  • "adresse" pointe vers un objet imbriqué.
  • "languesParlees" pointe vers un tableau de chaînes.

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 42 ou 3.14.
  • Booléen : true ou false.
  • null : l'absence de valeur.
  • Objet : une collection de paires clé-valeur entre {}.
  • Tableau : une liste ordonnée de valeurs entre [].

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.

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.

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 :

Fenêtre de terminal
# Valide et reformate un fichier (jq)
jq . data.json
# Équivalent avec Python
python3 -m json.tool data.json

Si 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.

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 :

Fenêtre de terminal
# Extraire une valeur
echo '{"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 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.

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.

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é dans tsconfig.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.

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: 35 est du JavaScript, pas du JSON ; il faut "age": 35.
  • Valeurs non supportées : undefined, NaN ou 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.

  • 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 jq ou python3 -m json.tool, qui pointent l'erreur.
  • JSON est le format standard des API REST (application/json).

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn