SyntaxError: Bad escaped character in JSON at position N signifie qu’il y a un antislash (\) à l’intérieur d’une chaîne suivi de quelque chose que JSON ne reconnaît pas comme un échappement valide. JSON n’autorise qu’un petit ensemble figé de séquences d’échappement —— tout le reste après un \ déclenche cette erreur. Voici la liste complète et comment corriger.
Quelle erreur de chaîne est-ce que je vois ?
- Bad escaped character —— un
\est suivi de quelque chose que JSON n’autorise pas (par ex.\x, chemins Windows). - Bad control character —— une tabulation/un retour à la ligne/un octet null brut se trouve à l’intérieur d’une chaîne, sans échappement.
- Unterminated string —— une chaîne a été ouverte avec
"mais jamais refermée.
À quoi ressemble l’erreur
// V8 (Chrome / Node / Edge)
SyntaxError: Bad escaped character in JSON at position 14
// Firefox
SyntaxError: JSON.parse: bad escaped character at line 1 column 15 of the JSON data
// Safari
SyntaxError: JSON Parse error: Invalid escape character \xLes seuls échappements que JSON autorise
À l’intérieur d’une chaîne JSON, un antislash ne peut être suivi que d’exactement l’un de ceux-ci :
\" guillemet double
\\ antislash
\/ slash
\b retour arrière
\f form feed
\n saut de ligne
\r retour chariot
\t tabulation
\uXXXX un point de code Unicode (exactement 4 chiffres hex) Tout le reste après un \ —— \x, \', \a, \0, un chemin Windows comme \Users, ou un \u12 mal formé —— compte comme un « bad escaped character ».
Pourquoi ça arrive
Cause 1 —— Échappements empruntés à d’autres langages
// ❌ \x et \' sont valides en JS/Python, pas en JSON
{ "code": "\x1b[0m", "name": "O\'Brien" }
// ✅ utiliser un échappement \u pour l’octet, ne pas échapper les apostrophes
{ "code": "\u001b[0m", "name": "O'Brien" }Cause 2 —— Chemins de fichiers Windows
// ❌ chaque antislash ouvre un échappement invalide
{ "path": "C:\Users\Ada\file.json" }
// ✅ échapper chaque antislash (ou utiliser des slashes)
{ "path": "C:\\Users\\Ada\\file.json" }
{ "path": "C:/Users/Ada/file.json" }Cause 3 —— Échappement \u tronqué ou mal formé
// ❌ \u demande exactement 4 chiffres hex
{ "char": "\u12" }
// ✅
{ "char": "\u0012" }Paires de substitution et caractères hors BMP
L’échappement \uXXXX de JSON est figé à 4 chiffres hex, ce qui adresse les points de code jusqu’à U+FFFF (le Plan Multilingue de Base). Les caractères au-dessus —— emojis, beaucoup d’extensions CJK, symboles mathématiques —— doivent s’écrire sous forme de paire de substitution UTF-16 :
// 😀 (U+1F600) en paire de substitution
"\uD83D\uDE00"
// non autorisé —— JSON n’a pas de \U ni de \u{...}
"\u1F600" // mauvais échappement (seuls les 4 premiers hex sont consommés ; le reste est du texte)
"\u{1F600}" // mauvais échappementC’est l’encodage de JSON sous forme UTF-16, même si le fichier sur disque est en UTF-8. Deux conséquences pratiques :
- UTF-8 dans le fichier est très bien. Vous pouvez écrire
"😀"littéralement ; les parsers modernes le gèrent. La forme en paire de substitution n’est nécessaire que lorsque vous devez échapper. - Attention aux substituts orphelins. Un
\uD83Dsans son substitut bas correspondant, ou l’inverse, est techniquement autorisé par JSON mais constitue de l’UTF-16 mal formé —— les consommateurs en aval (en particulierjsonbde Postgres) le rejetteront.JSON.stringifyne produit que des paires bien formées.
Comment corriger —— étape par étape
- Sauter à la position signalée et trouver le
\qui précède un caractère invalide. - Antislash isolé ? (par ex. un chemin Windows) —— doublez-le en
\\, ou passez aux slashes. - Échappement étranger comme
\xou\'? —— convertissez\xNNen\u00NNet retirez l’antislash devant'. - Un
\utrop court ? —— remplissez à exactement quatre chiffres hex. - Meilleure correction : construisez le JSON avec
JSON.stringify(), qui ne produit que des échappements valides.
// Prévention —— l’échappement correct est automatique
JSON.stringify({ path: 'C:\\Users\\Ada', code: '\x1b[0m' });
// → {"path":"C:\\Users\\Ada","code":"\u001b[0m"}Questions fréquentes
Que signifie « Bad escaped character in JSON » ?
Un antislash à l’intérieur d’une chaîne est suivi d’un caractère qui ne fait pas partie des échappements autorisés par JSON (" \\ / b f n r t ou \uXXXX). Les coupables habituels sont \x, \', et les chemins Windows non échappés.
Comment mettre un chemin Windows dans du JSON ?
Doublez chaque antislash (C:\\\\Users) pour que chacun forme un échappement \\ valide, ou utilisez des slashes (C:/Users), que JSON accepte.
Est-ce la même chose que « Bad control character » ?
Non. « Bad escaped character » parle d’une séquence invalide après un antislash ; « bad control character » parle d’un octet de contrôle brut et non échappé (tabulation, saut de ligne) sans aucun antislash.
Corriger maintenant
- JSON Fix —— localiser et réparer des échappements invalides dans le navigateur
- Bad Control Character dans un littéral de chaîne en JSON —— octets de contrôle bruts vs échappements
- Chaîne non terminée en JSON —— quand une chaîne ne se referme jamais
- Comment corriger les erreurs « Unexpected Token » de JSON.parse —— le guide d’erreurs plus large