CodeKitHub
Français
Résoudre l'erreur « Unexpected token » dans JSON.parse : guide pratique sur toutes les causes possibles

Résoudre l'erreur « Unexpected token » dans JSON.parse : guide pratique sur toutes les causes possibles

Publié le 23 juil. 2026

SyntaxError: Unexpected token X in JSON at position N est l’une des erreurs les plus courantes en JavaScript, et l’une des moins utiles : elle vous indique l’analyseur a échoué, mais pas pourquoi. Voici comment y remédier concrètement.

Étape 1 : lire le numéro de position

JSON.parse compte les caractères à partir du début de la chaîne, en commençant par 0. Si votre JSON provient d’une variable, affichez la partie exacte autour de cette position avant toute autre chose :

try {
JSON.parse(raw);
} catch (e) {
const match = e.message.match(/position (\d+)/);
if (match) {
const pos = Number(match[1]);
console.log(raw.slice(Math.max(0, pos - 20), pos + 20));
}
}

Ce simple extrait de code permet de résoudre davantage de ces erreurs que n’importe quel conseil sur la syntaxe JSON, car la plupart des erreurs de « token inattendu » sont en réalité des erreurs du type « je ne sais pas ce que contient réellement ma chaîne » : des espaces de fin issus d’un copier-coller, un saut de ligne supplémentaire provenant d’un littéral de modèle, ou une marque d’ordre des octets (BOM) tout au début (position 0, token , qui est invisible dans la plupart des éditeurs).

Les 7 causes, classées par fréquence réelle d’apparition

  1. Virgule de fin. {"a": 1, "b": 2,} — valide dans les littéraux d’objet JS, non valide en JSON. La virgule avant } ou ] est la cause la plus courante.
  2. Des guillemets simples au lieu de guillemets doubles. {'a': 1} est du JS, pas du JSON. Le JSON exige des guillemets doubles autour des clés et des valeurs de chaîne, sans exception.
  3. Des clés non mises entre guillemets. {a: 1} — là encore, valide en JS, invalide en JSON. Chaque clé doit être placée entre guillemets.
  4. Une valeur JavaScript qui n’est pas valide en JSON. undefined, NaN, une fonction ou un commentaire ( // like this) — aucun de ces éléments n’existe dans la spécification JSON, mais uniquement en JavaScript.
  5. Double encodage. Vous avez appelé JSON.stringify() deux fois, ou vous analysez une chaîne qui est déjà un objet — vérifiez avec typeof raw === 'string' avant d’appeler .parse().
  6. Une chaîne vide ou une réponse undefined. Si une requête a échoué sans message d’erreur ou a renvoyé un corps vide, JSON.parse("") lance Unexpected end of JSON input, une erreur différente mais liée — vérifiez response.ok et consignez le corps brut avant l’analyse.
  7. BOM ou caractères invisibles issus d’un copier-coller. Le collage de JSON à partir d’un PDF, d’un document Word ou de la sortie d’un terminal peut introduire un BOM ou un espace insécable qui ressemble à s’y méprendre à un caractère normal.

La solution la plus rapide : validez avant de déboguer

La lecture caractère par caractère des messages d’erreur bruts est fastidieuse. Collez la chaîne exacte dans un formateur qui met directement en évidence le caractère invalide au lieu de deviner à partir d’un numéro de position — cela transforme « quelque part près du caractère 812 » en « cette parenthèse manquante spécifique, juste ici ». (Lien ci-dessous.)

Lorsque le JSON est bel et bien valide mais échoue quand même

Si un formateur confirme que votre JSON est syntaxiquement correct et que JSON.parse lance toujours une exception, la chaîne que vous transmettez n’est pas celle que vous pensez. La raison la plus courante : vous appelez .parse() sur un objet Response au lieu de son corps résolu.

// Wrong — parses "[object Response]", not the body
const data = JSON.parse(await fetch(url));

// Right
const data = await (await fetch(url)).json();
// or, if you need the raw text first:
const text = await (await fetch(url)).text();
const data = JSON.parse(text);

Référence rapide

Symptôme Cause probable
Unexpected token } Virgule finale avant l’accolade fermante
Unexpected token ' Utilisation de guillemets simples au lieu de guillemets doubles
Unexpected token a (ou n’importe quelle lettre) Clé d’objet non mise entre guillemets
Unexpected end of JSON input Chaîne vide, réponse tronquée ou parenthèse non fermée
Unexpected token  (position 0) Marque d’ordre des octets provenant d’un fichier copié-collé ou enregistré sous Windows

Aucune de ces situations ne nécessite de mémoriser quoi que ce soit — la correction se fait toujours en trois étapes identiques : enregistrer la tranche autour de la position signalée, la passer dans un formateur, corriger le caractère signalé.

← Retour au blog