Valider un JSON consiste à vérifier que le texte respecte la grammaire définie dans la RFC 8259 : des objets entre accolades avec des clés entre guillemets doubles, des tableaux entre crochets, des valeurs séparées par des virgules sans virgule finale, et pas de commentaires. Presque toutes les erreurs d’analyse viennent de cinq causes : virgules finales, guillemets simples, commentaires, clés sans guillemets et valeurs interdites comme undefined ou NaN. Vous pouvez le valider en quelques secondes avec un outil en ligne, avec jq dans le terminal ou avec JSON.parse dans Node.js.
Cet article passe en revue les règles, montre comment lire les messages d’erreur et compare les façons de valider selon le contexte.
Les règles de JSON en six lignes
- Un document JSON est une valeur : objet, tableau, chaîne, nombre,
true,falseounull. - Les objets sont entre
{}et contiennent des paires"clé": valeurséparées par des virgules. - Les tableaux sont entre
[]et contiennent des valeurs séparées par des virgules. - Les chaînes utilisent toujours des guillemets doubles ; à l’intérieur, les caractères spéciaux s’échappent avec
\(\",\\,\n,\uXXXX). - Les nombres n’ont ni guillemets, ni zéros initiaux, ni formes comme
.5ou+1;1e3est valide. - Il n’existe ni commentaires, ni virgules finales, ni
undefined,NaN,Infinity, ni dates comme type propre (elles s’écrivent en chaînes).
Un exemple valide :
{
"nom": "AIMRAN Tools",
"version": 2,
"actif": true,
"etiquettes": ["images", "json", "texte"],
"auteur": { "nom": "Aimran", "web": "https://aimran.es" },
"datePublication": "2026-10-06"
}
Les cinq erreurs les plus fréquentes
1. Virgule finale
{ "a": 1, "b": 2, }
Valide en JavaScript, invalide en JSON. Node.js 22 la rejette avec Expected double-quoted property name in JSON at position 18 (line 1 column 19) : après la virgule, il attend une autre clé et trouve }.
2. Guillemets simples
{ 'a': 1 }
JSON n’admet que les guillemets doubles. Node.js 22 renvoie Expected property name or '}' in JSON at position 2 (line 1 column 3) : l’analyseur arrive au guillemet simple et ne le reconnaît pas comme début d’une clé. C’est l’erreur typique en copiant un objet depuis du code Python ou JavaScript.
3. Commentaires
{
// configuration
"debug": true
}
Ni // ni /* */ n’existent en JSON. Certains formats dérivés (JSONC, JSON5) les admettent, c’est pourquoi des fichiers comme tsconfig.json ou settings.json de VS Code les tolèrent, mais un analyseur strict les rejette.
4. Clés sans guillemets
{ nom: "Aimran" }
En JavaScript, c’est un littéral d’objet valide ; en JSON, la clé doit être entre guillemets doubles. Node.js renvoie le même message qu’avec les guillemets simples (Expected property name or '}'), car dans les deux cas, c’est le guillemet double qui manque.
5. Valeurs qui n’existent pas en JSON
{ "total": NaN, "date": undefined }
NaN, Infinity et undefined ne sont pas des valeurs JSON. En sérialisant avec JSON.stringify en JavaScript, les propriétés undefined disparaissent et NaN devient null, ce qui masque parfois le problème jusqu’à ce qu’un autre système lise le fichier.
Autres erreurs moins fréquentes : des guillemets typographiques (“ et ”) collés depuis un traitement de texte, un caractère BOM en début de fichier, ou un nombre avec zéro initial (007).
Comment lire un message d’erreur
Les analyseurs indiquent la position (indice de caractère) ou la ligne et la colonne où ils ont cessé de comprendre le texte. Ce point est celui où l’analyseur a abandonné, qui ne coïncide pas toujours avec l’erreur réelle : une accolade non fermée ligne 3 peut être signalée en fin de fichier. Si le message ne vous mène pas directement au problème, cherchez en arrière depuis la position indiquée le dernier élément qui était encore valide.
Python 3.13, par exemple, est plus descriptif avec la virgule finale : Illegal trailing comma before end of object: line 1 column 17 (char 16). Les versions antérieures donnaient le message générique Expecting property name enclosed in double quotes.
Façons de valider un JSON
| Contexte | Outil | Commande ou usage |
|---|---|---|
| Rapide, sans rien installer | Validateur en ligne | Collez le texte dans le formateur JSON d’AIMRAN Tools : il signale la ligne de l’erreur et formate le résultat sans envoyer les données à aucun serveur. |
| Terminal (Linux, macOS, WSL) | jq |
jq . fichier.json affiche le JSON formaté ou l’erreur avec la ligne. jq empty fichier.json ne fait que valider. |
| Terminal, sans rien installer | Python | python3 -m json.tool fichier.json |
| Projet JavaScript | Node.js | node -e "JSON.parse(require('fs').readFileSync('fichier.json','utf8'))" |
| Éditeur | VS Code, Zed, etc. | Ils signalent les erreurs de syntaxe à la volée ; assurez-vous que le fichier est en mode JSON et non JSONC. |
| Valider la structure, pas seulement la syntaxe | JSON Schema | Définit les clés et types attendus et valide avec une bibliothèque comme Ajv (JavaScript) ou jsonschema (Python). |
Pour des données sensibles (configurations avec des clés, exports d’utilisateurs), préférez des outils qui travaillent en local ou dans le navigateur sans envoyer le contenu.
Valider la syntaxe n’est pas valider le contenu
Un JSON syntaxiquement correct peut rester inutile pour votre application : une clé mal orthographiée, un nombre là où vous attendiez une chaîne, un champ obligatoire absent. C’est ce que résout JSON Schema, un standard pour décrire la forme attendue d’un document. Si vous consommez du JSON de tiers ou exposez une API, il vaut la peine de définir un schéma et de le valider à la frontière de votre système.
Conclusion
JSON est un petit format aux règles strictes, et la plupart des erreurs viennent de le traiter comme du JavaScript : virgules finales, guillemets simples, commentaires et clés sans guillemets. Pour trouver la faute, utilisez un validateur qui indique la position (en ligne, jq, json.tool ou JSON.parse) et rappelez-vous que le point signalé est celui où l’analyseur s’est arrêté, pas forcément celui où le problème a commencé. Et si le JSON fait partie d’un contrat entre systèmes, ajoutez JSON Schema pour valider aussi le contenu.