Formater, valider et réparer du JSON
Lire et déboguer du JSON rapidement — l'indenter, trouver la ligne exacte d'une erreur de syntaxe, comprendre les fautes courantes et le minifier pour la production.
· 6 min de lecture
Le JSON est la langue commune des API et des fichiers de configuration, et il est volontairement strict : pas de commentaires, pas de virgule finale, pas d'apostrophes. Un seul caractère de trop rend le document invalide, et le message d'erreur indique l'endroit où l'analyseur a renoncé, pas celui où vous vous êtes trompé.
La méthode rapide : collez le document dans le formateur JSON pour obtenir une version indentée, ou dans le validateur JSON s'il est déjà refusé quelque part et qu'il vous faut la position exacte du problème. Les deux analysent le texte dans votre navigateur : une réponse d'API contenant des données de production n'est envoyée nulle part.
Les règles sur lesquelles on trébuche
| Erreur | Invalide | Valide |
|---|---|---|
| Virgule finale | {"a": 1,} |
{"a": 1} |
| Apostrophes | {'a': 1} |
{"a": 1} |
| Clé sans guillemets | {a: 1} |
{"a": 1} |
| Commentaire | {"a": 1 // note} |
interdit, sans exception |
| Nombres spéciaux | NaN, Infinity |
null ou une chaîne |
undefined |
{"a": undefined} |
omettre la clé, ou null |
| Zéro initial | {"a": 01} |
{"a": 1} |
| Hexadécimal | {"a": 0x1F} |
{"a": 31} |
| Guillemets typographiques | {“a”: 1} |
{"a": 1} |
| Texte après la valeur | {"a": 1}suite |
une seule valeur par document |
Deux autres points faciles à oublier : un texte JSON doit être en UTF-8, et une chaîne ne peut pas contenir un retour à la ligne brut — il faut écrire \n.
Les guillemets typographiques méritent un avertissement à part. Ils apparaissent dès qu'un JSON est passé par un traitement de texte, une fenêtre de discussion ou une page de documentation qui corrige automatiquement la ponctuation, et ils ressemblent beaucoup aux guillemets droits dans la plupart des polices.
Pourquoi un objet JavaScript n'est pas du JSON
Les littéraux d'objet JavaScript acceptent toutes les formes invalides du tableau ci-dessus : c'est pourquoi recopier un objet depuis du code vers un fichier .json échoue si souvent. L'inverse est vrai aussi : JSON.stringify supprime sans prévenir les clés dont la valeur est undefined ou une fonction, et transforme undefined en null à l'intérieur d'un tableau.
D'autres langages sont permissifs à leur manière. Le module json de Python accepte NaN et Infinity par défaut, sous la forme d'une extension documentée : un fichier qui se charge parfaitement dans un script Python peut donc être refusé par un navigateur, un service Go ou ce validateur. Si un document doit circuler entre plusieurs langages, tenez-vous-en à la grammaire stricte.
Lire un message d'erreur
Les messages indiquent une position, c'est-à-dire un décalage en caractères depuis le début du document, ainsi qu'une ligne et une colonne. Le validateur JSON affiche la ligne, la colonne et un repère sous le caractère fautif, et donne le nombre de clés et la profondeur d'imbrication pour un document valide.
La formulation vous dit ce que l'analyseur attendait :
| Message | Ce que cela signifie en général |
|---|---|
Expected double-quoted property name in JSON at position 8 |
Une virgule finale, ou une clé sans guillemets ou entre apostrophes |
Expected ',' or '}' after property value in JSON at position 8 |
Une virgule manquante entre deux paires, ou un commentaire |
Expected ',' or ']' after array element |
Le document est tronqué, ou une virgule manque |
Unexpected token 'N' |
Un NaN, un undefined ou un autre littéral étranger au JSON |
Unexpected non-whitespace character after JSON |
Deux documents collés, ou du texte parasite à la fin |
L'habitude à prendre : la position signalée est celle où l'analyse est devenue impossible, pas celle de la faute. Une virgule manquante à la ligne 40 est souvent signalée à la ligne 41, et une accolade fermante absente l'est presque toujours à la toute fin du fichier. Regardez juste avant la position indiquée, pas à la position elle-même.
Pour un contenu tronqué, commencez par vérifier la longueur totale. Une réponse coupée par un proxy ou une ligne de journal rognée à largeur fixe échouera toujours près de la fin, et aucune correction autour de la position signalée n'y changera rien.
Indenter, trier, comparer
Le formatage resérialise les données analysées avec l'indentation choisie : la sortie est donc forcément valide, et les nombres, chaînes et échappements sont conservés à l'identique. Le tri alphabétique des clés est récursif, ce qui transforme « pourquoi ces deux réponses d'API diffèrent-elles ? » en comparaison lisible : triez les deux, puis collez-les dans Comparer deux textes pour ne voir que les vraies différences au lieu du bruit lié à l'ordre des clés.
Minifier pour la production, en sachant ce que cela rapporte
La minification supprime tous les espaces, tabulations et retours à la ligne situés hors des chaînes. Sur des fichiers réels, le gain brut est net : un rapport indenté de 769 377 octets tombe à 561 925 octets, soit 27 % de moins, et une petite configuration de 849 octets passe à 595 octets, près de 30 %.
L'essentiel de ce gain disparaît dès que la compression de transport intervient, car les espaces retirés sont précisément ce que gzip et Brotli compriment le mieux. Ce même rapport compressé en gzip pèse 92 899 octets indenté et 87 880 octets minifié : un gain réel de 5,4 % seulement. Minifiez parce que le JSON doit tenir dans une variable d'environnement, une URL ou un attribut HTML, et laissez la compression s'occuper du réseau. Le minificateur JSON affiche le nombre d'octets avant et après.
Ce que le JSON ne sait pas représenter
Il n'existe ni type date, ni type binaire, ni commentaire. Les conventions sont : les dates sous forme de chaînes ISO 8601 ("2026-09-24T10:00:00Z"), les données binaires en Base64 — voir Le Base64 expliqué — et les « commentaires » sous forme de clé ordinaire comme "_comment" que les consommateurs ignorent.
Les nombres sont le point le plus délicat. Le JSON n'a qu'un seul type numérique et n'impose aucune précision, et JavaScript lit tous les nombres comme des flottants 64 bits : 9007199254740993 analysé dans un navigateur ressort en 9007199254740992. Python analyse le même document exactement. Si vos identifiants dépassent 2^53 − 1, transmettez-les sous forme de chaînes.
Les clés en double ne sont pas une erreur de grammaire, et la plupart des analyseurs conservent la dernière : {"a":1,"a":2} devient {"a":2}, sans le moindre avertissement.
Aller vers le tableur, et en revenir
Vous devez transmettre des données à quelqu'un qui ne lit pas le JSON ? JSON vers CSV aplatit les objets imbriqués en colonnes du type address.city, et CSV vers JSON fait le chemin inverse en convertissant nombres et booléens dans les types JSON correspondants. Si le CSV est ensuite ouvert dans Excel, le guide Ouvrir un CSV dans Excel correctement traite les problèmes de séparateur et d'encodage qui suivent.
Questions fréquentes
Le validateur vérifie-t-il un schéma ? Non. Il contrôle la syntaxe selon la RFC 8259. La validation de schéma — champs obligatoires, types, plages de valeurs — est une étape distincte, avec un outil de type JSON Schema.
Peut-on y coller une réponse d'API sans risque ? Ces outils analysent le texte dans le navigateur et n'envoient rien. Par principe, retirez tout de même jetons et données personnelles avant de partager du JSON.
Peut-on garder des commentaires dans un fichier de configuration ? Pas dans un .json. Des formats comme JSON5 ou JSONC les autorisent, mais ils exigent un analyseur qui les prenne en charge.
Pour aller plus loin
- Rendre un contenu lisible : formateur JSON
- Localiser une erreur de syntaxe : validateur JSON
- Compresser pour l'intégration : minificateur JSON
Outils utilisés dans ce guide
- Formateur JSONIndentez du JSON et triez les clés si besoin.
- Validateur JSONVérifiez la syntaxe JSON et localisez les erreurs.
- Minificateur JSONSupprimez les espaces d'un JSON et mesurez le gain.
- Convertir CSV en JSONTransformez des lignes CSV en tableau JSON d'objets.
- Convertir JSON en CSVConvertissez des tableaux JSON en CSV pour tableur.
- Comparer deux textes (diff)Comparez deux textes et surlignez les différences.