Guide

Fichier JSON invalide : les erreurs de syntaxe les plus fréquentes et l'encodage caché

« Unexpected token » ou « Unexpected end of JSON input » : la quasi-totalité des fichiers JSON qui refusent de se parser tombent dans une poignée de causes reconnaissables, syntaxe ou encodage.

Un fichier JSON qui refuse de se parser (« Unexpected token », « Unexpected end of JSON input », ou une erreur silencieuse selon l’outil) tombe presque toujours dans l’une de ces causes, largement plus fréquentes qu’une réelle corruption du fichier.

Erreurs de syntaxe les plus courantes

Une virgule finale (trailing comma). La norme JSON interdit toute virgule après le dernier élément d’un objet {} ou d’un tableau []. Cette erreur est la plus fréquente chez qui édite un JSON à la main en copiant des habitudes JavaScript, où cette virgule est tolérée.

Des guillemets simples au lieu de doubles. JSON n’accepte que le guillemet double " pour les chaînes et les clés ; le guillemet simple ', valide en JavaScript ou en Python, provoque une erreur de syntaxe immédiate.

Une clé non entourée de guillemets. Contrairement à un objet JavaScript où {cle: "valeur"} est valide, JSON exige {"cle": "valeur"} : chaque clé doit être une chaîne entre guillemets doubles.

Un caractère non échappé dans une chaîne. Un guillemet double, une barre oblique inversée ou un retour à la ligne littéral à l’intérieur d’une valeur texte doit être échappé (\", \\, \n) ; laissé tel quel, il termine la chaîne prématurément aux yeux du parseur.

Une accolade ou un crochet non refermé. Fréquent sur un fichier généré par un script interrompu en cours d’écriture : le fichier se termine avant sa structure complète, d’où l’erreur « Unexpected end of JSON input ».

La cause invisible : l’encodage

Un JSON doit être encodé en UTF-8 sans BOM pour être interopérable de façon fiable. Un BOM (trois octets EF BB BF invisibles à l’affichage) ajouté en tête de fichier par certains éditeurs de texte sous Windows casse le parsing strict de nombreuses bibliothèques, qui attendent que le premier caractère du flux soit directement { ou [. Ce cas est particulièrement piégeux car le fichier s’affiche normalement dans n’importe quel éditeur de texte : rien ne le distingue visuellement d’un JSON valide. Le détecteur d’encodage de fichiers.org révèle la présence d’un BOM ou un encodage autre qu’UTF-8 en quelques secondes, avant de chercher plus loin dans la syntaxe.

Démarche de diagnostic

  1. Vérifier l’encodage du fichier en premier : un JSON qui semble syntaxiquement correct mais échoue systématiquement au parsing a de bonnes chances de cacher un BOM ou un mauvais encodage.
  2. Repérer la position exacte indiquée par le message d’erreur (numéro de ligne ou de caractère) plutôt que de relire le fichier entier.
  3. Passer le fichier dans un linter JSON, qui localise précisément la virgule, le guillemet ou la balise fautive sans avoir à la repérer à l’œil.

Détecter l'encodage réel d'un fichier JSON →

Formats concernés

Catégories concernées

Voir aussi

Questions fréquentes

Pourquoi une virgule finale (trailing comma) fait-elle échouer un JSON alors qu'elle passe en JavaScript ?

La norme JSON (RFC 8259) interdit explicitement toute virgule après le dernier élément d'un objet ou d'un tableau, contrairement à la syntaxe d'un objet JavaScript qui la tolère. Un fichier édité à la main en copiant la syntaxe JavaScript introduit souvent cette virgule surnuméraire, invisible à l'œil mais rejetée par tout parseur JSON strict.

Pourquoi un fichier JSON qui s'affiche normalement dans un éditeur de texte échoue-t-il quand même au parsing ?

Un BOM (Byte Order Mark, trois octets invisibles EF BB BF) ajouté en tête de fichier par certains éditeurs sous Windows ne s'affiche pas visuellement mais casse le parsing strict de nombreuses bibliothèques JSON, qui attendent que le tout premier caractère du flux soit un `{` ou un `[`.

Les guillemets simples sont-ils valides en JSON ?

Non : la norme JSON n'autorise que les guillemets doubles pour délimiter les chaînes et les clés. Les guillemets simples, valides en JavaScript, produisent une erreur de syntaxe dans un parseur JSON conforme à la RFC 8259.

Sources

Dernière mise à jour :