Pourquoi mon JSON est-il invalide ? Les erreurs les plus courantes
« Unexpected token » et « Unexpected end of JSON input » parlent rarement du caractère qu’ils pointent : le problème est presque toujours plus haut. Les dix erreurs qui rendent un JSON invalide, pourquoi ce format strict les refuse et comment les trouver vite.
JSON est plus strict que JavaScript
Le JSON ressemble à un objet JavaScript, et c’est de là que viennent presque tous les ennuis : des choses parfaitement valides en JavaScript ne le sont pas en JSON. Le format est défini par la RFC 8259 et il est volontairement petit. JSON.parse() suit cette grammaire, et MDN rappelle qu’il lève une SyntaxError dès que le texte ne la respecte pas.
Tous les exemples ci-dessous échouent dans JSON.parse(). Nous avons vérifié chacun dans une version récente de Node.js.
1. Une virgule finale
{ "nom": "Ana", "age": 31, }
La virgule après le dernier élément est l’erreur la plus fréquente de toutes. JavaScript, beaucoup d’éditeurs et même certains formats de configuration l’acceptent ; pas JSON. Cela vaut aussi pour les tableaux : [1, 2, 3, ] est invalide. MDN donne les deux cas comme exemples de JSON illégal.
2. Des guillemets simples
{ 'nom': 'Ana' }
Les chaînes JSON sont entre guillemets doubles. Les guillemets simples ne conviennent pas, ni pour les clés ni pour les valeurs. Si vous écrivez du JSON dans une chaîne JavaScript, utilisez des guillemets simples pour la chaîne JavaScript et laissez les doubles à l’intérieur, ou échappez-les.
3. Des clés sans guillemets
{ nom: "Ana" }
En JSON, toute clé est une chaîne et prend des guillemets doubles. Sans guillemets, c’est du JavaScript valide, et c’est pourquoi cela se glisse quand on copie un objet littéral depuis du code.
4. Des commentaires
{ "nom": "Ana" /* l’utilisateur */ }
La grammaire JSON n’a pas de commentaires, ni // ni /* */. Les fichiers de configuration qui « acceptent les commentaires » utilisent une variante comme JSONC ou JSON5, pas du JSON proprement dit. Retirez les commentaires avant l’analyse ou déplacez la note dans un champ dédié.
5. NaN, Infinity, undefined et les valeurs Python
{ "ratio": NaN, "limite": Infinity, "x": undefined }
La RFC 8259 le dit sans détour : les valeurs numériques qui ne peuvent pas être représentées dans la grammaire des nombres, comme Infinity et NaN, ne sont pas autorisées. undefined n’est pas une valeur JSON. Utilisez null ou supprimez le champ. (JSON.stringify fait de même dans l’autre sens : il transforme NaN et Infinity en null et omet les propriétés dont la valeur est undefined.) C’est vrai aussi de True, False et None de Python, qui apparaissent quand on colle la sortie de print() au lieu de celle de json.dumps() : JSON exige true, false et null en minuscules.
6. Des nombres mal écrits
{ "a": 01, "b": +1, "c": .5, "d": 5., "e": 0x1F }
La grammaire des nombres est étroite : pas de zéro initial, pas de signe plus, un chiffre de chaque côté de la virgule décimale (le point, en JSON) et pas d’hexadécimal. Les cinq valeurs ci-dessus sont invalides. Cela vient souvent d’identifiants ou de codes postaux avec des zéros devant : si le zéro initial compte, stockez la valeur sous forme de chaîne ("01234").
7. Une virgule manquante (ou en trop)
{ "a": 1 "b": 2 }
Il faut une virgule entre deux éléments. C’est typique quand on colle une nouvelle ligne au milieu d’un objet en oubliant d’ajouter la virgule à la ligne précédente. L’analyseur désigne en général le début de la deuxième clé, pas l’endroit où la virgule manquait.
8. Des retours à la ligne ou des tabulations bruts dans une chaîne
Une chaîne ne peut pas contenir un vrai retour à la ligne ni une vraie tabulation : il faut les écrire sous forme de séquences \n et \t. Un texte sur plusieurs lignes collé tel quel entre les guillemets casse l’analyse. Les caractères inférieurs à U+0020 doivent être échappés.
9. Guillemets typographiques et autres caractères invisibles
Si vous copiez du JSON depuis un document, un e-mail ou une messagerie, les guillemets droits ont pu être remplacés par des guillemets typographiques (“ ”), presque identiques à l’œil et non valables comme délimiteurs. C’est pareil pour les espaces insécables et les caractères de largeur nulle. Une marque d’ordre des octets (BOM) au tout début du fichier peut aussi provoquer une erreur : la RFC 8259 dit que les implémentations ne doivent pas en ajouter à un JSON transmis par réseau. Si un document paraît correct et échoue, collez-le dans le formateur et validateur JSON et regardez où l’analyseur s’arrête.
10. Texte coupé ou vide
« Unexpected end of JSON input » signifie que le texte s’est terminé avant la fermeture de la structure : il manque une accolade ou un crochet fermant, ou l’on analyse une chaîne vide. Vérifiez que la réponse n’a pas été coupée (requête en échec, limite de taille) et que vous n’analysez pas un corps vide.
Deux choses valides qui surprennent
- Une valeur seule est un JSON valide.
42,"salut"etnullsont des textes JSON complets. Un document n’a pas à être un objet ou un tableau. - Les clés en double sont valides, mais dangereuses.
{ "a": 1, "a": 2 }s’analyse sans erreur. Mais la RFC 8259 dit que les noms d’un objet DEVRAIENT être uniques, et que lorsqu’ils ne le sont pas le comportement du logiciel qui le reçoit est imprévisible. Beaucoup d’analyseurs gardent la dernière valeur ; n’y comptez pas.
Comment trouver l’erreur vite
- Collez le texte dans le formateur et validateur JSON. Il indique la ligne et la colonne où l’analyse s’arrête et explique le problème en termes clairs, et il fonctionne dans votre navigateur : vous pouvez donc coller du JSON contenant des données réelles sans l’envoyer nulle part. Si l’intention est évidente, sa réparation automatique corrige les cas habituels (virgules finales, guillemets simples, clés sans guillemets, commentaires, valeurs Python, guillemets typographiques) et vous dit ce qu’elle a changé ; vérifiez le résultat, car une réparation est une hypothèse raisonnable, pas une garantie.
- Regardez avant la position signalée, pas seulement dessus : une virgule ou des guillemets manquants sont souvent signalés sur l’élément suivant.
- Une fois le JSON valide, vous pouvez le réutiliser ailleurs : le formateur sert aussi à le minifier ou à le rendre lisible.
Sources et pour aller plus loin
- RFC 8259 : The JavaScript Object Notation (JSON) Data Interchange Format (en anglais)
- MDN : JSON.parse() (exemples de JSON illégal)
Données vérifiées le 3 octobre 2026.
Faites-le maintenant, gratuitement, dans votre navigateur. Vos fichiers ne sont pas envoyés.
Formatez, validez et réparez du JSON, avec la ligne exacte de chaque erreur.
Questions fréquentes
Pourquoi JSON.parse affiche-t-il « Unexpected token » ?
Un JSON peut-il contenir des commentaires ?
Peut-on utiliser des guillemets simples en JSON ?
Une virgule finale est-elle autorisée en JSON ?
Un JSON peut-il contenir NaN ou Infinity ?
Que signifie « Unexpected end of JSON input » ?
Guides associés
Outils de ce guide
Ils fonctionnent dans votre navigateur : rien n’est envoyé.