← Tutti gli articoli

Carattere di escape errato in JSON: escape validi e correzioni

Un carattere di escape errato in JSON significa che dopo un backslash c'è qualcosa che JSON non permette. Ecco l'elenco completo degli escape validi, più correzioni per \x, percorsi e \u.

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?

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 \x

I 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 valido

Questa è 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 \uD83D senza il suo low surrogate accoppiato (o viceversa) è tecnicamente ammesso da JSON ma è UTF-16 malformato —— i consumatori a valle (specialmente il jsonb di Postgres) lo rifiutano. JSON.stringify produce solo coppie ben formate.

Come correggere —— passo a passo

  1. Salta alla posizione segnalata e trova la \ che precede un carattere non valido.
  2. Barra rovesciata vagante? (es. un percorso Windows) —— raddoppia in \\, oppure passa alle barre normali.
  3. Escape estraneo tipo \x o \'? —— converti \xNN in \u00NN e rimuovi la barra rovesciata prima di '.
  4. Un \u corto? —— riempi a esattamente quattro cifre esadecimali.
  5. 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