SyntaxError: Bad escaped character in JSON at position N significa che dentro una stringa c'è una barra rovesciata (\) seguita da qualcosa che JSON non riconosce come escape valido. JSON ammette solo un piccolo insieme fisso di sequenze di escape —— qualunque altra cosa dopo una \ fa scattare questo errore. Ecco l'elenco completo e come correggere.
Quale errore di stringa sto vedendo?
- Bad escaped character —— una
\è seguita da qualcosa che JSON non permette (es.\x, percorsi Windows). - Bad control character —— una tabulazione/un a-capo/un byte null grezzo si trova dentro una stringa senza escape.
- Unterminated string —— una stringa è stata aperta con
"ma non chiusa.
Com'è fatto l'errore
// 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 \xI soli escape che JSON ammette
Dentro una stringa JSON, una barra rovesciata può essere seguita solo da uno di questi:
\" virgolette doppie
\\ barra rovesciata
\/ barra normale
\b backspace
\f form feed
\n a-capo
\r carriage return
\t tabulazione
\uXXXX un code point Unicode (esattamente 4 cifre esadecimali) Qualunque altra cosa dopo una \ —— \x, \', \a, \0, un percorso Windows tipo \Users, o un \u12 malformato —— conta come „bad escaped character“.
Perché succede
Causa 1 —— Escape presi in prestito da altri linguaggi
// ❌ \x e \' sono validi in JS/Python, non in JSON
{ "code": "\x1b[0m", "name": "O\'Brien" }
// ✅ usa un escape \u per quel byte e non fare escape degli apostrofi
{ "code": "\u001b[0m", "name": "O'Brien" }Causa 2 —— Percorsi di file Windows
// ❌ ogni barra rovesciata apre un escape non valido
{ "path": "C:\Users\Ada\file.json" }
// ✅ fai escape di ogni barra (o usa barre normali)
{ "path": "C:\\Users\\Ada\\file.json" }
{ "path": "C:/Users/Ada/file.json" }Causa 3 —— Escape \u troncato o malformato
// ❌ \u richiede esattamente 4 cifre esadecimali
{ "char": "\u12" }
// ✅
{ "char": "\u0012" }Coppie surrogate e caratteri fuori dal BMP
L'escape \uXXXX di JSON è fisso a 4 cifre esadecimali, che indirizzano code point fino a U+FFFF (il Basic Multilingual Plane). I caratteri sopra quella soglia —— emoji, molte estensioni CJK, simboli matematici —— vanno scritti come coppia surrogata UTF-16:
// 😀 (U+1F600) come coppia surrogata
"\uD83D\uDE00"
// non ammesso —— JSON non ha né \U né \u{...}
"\u1F600" // escape non valido (solo le prime 4 cifre vengono consumate; il resto è testo)
"\u{1F600}" // escape non validoQuesta è la codifica di JSON in forma UTF-16, anche se il file su disco è UTF-8. Due conseguenze pratiche:
- UTF-8 nel file va bene. Puoi scrivere
"😀"letteralmente; i parser moderni lo gestiscono. La forma a coppia surrogata serve solo quando devi fare escape. - Attenzione ai surrogati spaiati. Un
\uD83Dsenza il suo low surrogate accoppiato (o viceversa) è tecnicamente ammesso da JSON ma è UTF-16 malformato —— i consumatori a valle (specialmente iljsonbdi Postgres) lo rifiutano.JSON.stringifyproduce solo coppie ben formate.
Come correggere —— passo a passo
- Salta alla posizione segnalata e trova la
\che precede un carattere non valido. - Barra rovesciata vagante? (es. un percorso Windows) —— raddoppia in
\\, oppure passa alle barre normali. - Escape estraneo tipo
\xo\'? —— converti\xNNin\u00NNe rimuovi la barra rovesciata prima di'. - Un
\ucorto? —— riempi a esattamente quattro cifre esadecimali. - Correzione migliore: costruisci il JSON con
JSON.stringify(), che produce solo escape validi.
// Prevenzione —— l'escape corretto è automatico
JSON.stringify({ path: 'C:\\Users\\Ada', code: '\x1b[0m' });
// → {"path":"C:\\Users\\Ada","code":"\u001b[0m"}Domande frequenti
Cosa significa „Bad escaped character in JSON“?
Una barra rovesciata dentro una stringa è seguita da un carattere che non rientra fra gli escape permessi da JSON (" \\ / b f n r t o \uXXXX). I colpevoli comuni sono \x, \' e percorsi Windows senza escape.
Come metto un percorso Windows in JSON?
Raddoppia ogni barra rovesciata (C:\\\\Users) in modo che ciascuna sia un escape \\ valido, o usa le barre normali (C:/Users), che JSON accetta.
È la stessa cosa di „Bad control character“?
No. „Bad escaped character“ riguarda una sequenza non valida dopo una barra rovesciata; „bad control character“ riguarda un byte di controllo grezzo e senza escape (tab, a-capo) senza alcuna barra rovesciata.
Correggi ora
- JSON Fix —— individua e ripara escape non validi nel browser
- Bad Control Character nella stringa letterale in JSON —— byte di controllo grezzi vs escape
- Stringa non terminata in JSON —— quando una stringa non si chiude
- Come correggere gli errori „Unexpected Token“ di JSON.parse —— la guida agli errori più ampia