Invalid \escape: line L column C (char N)
A un backslash dentro una stringa JSON segue un carattere che non è nessuno dei nove escape di JSON. Nel codice Python la confusione raddoppia, perché anche il literal di stringa Python consuma backslash: il testo che arriva al parser non è quello che hai scritto.
Incolla il tuo JSON e vedi esattamente dove si rompe
Nulla di ciò che incolli lascia il tuo browser. L’allowlist connect-src ne fa una garanzia del browser anziché una promessa. Verificalo tu stesso
Che cosa lo provoca davvero
In ordine di quanto spesso ciascuno si rivela essere la risposta.
-
01 Un percorso Windows
Ogni backslash va raddoppiato per JSON, e in un literal Python non raw va raddoppiato ancora per Python. Usare una raw string toglie uno di questi strati.
Si rompe
json.loads('{"p": "C:\Users"}')Funziona
json.loads(r'{"p": "C:\\Users"}') -
02 Un’espressione regolare
\d, \s e \w non sono escape JSON. Raddoppia ogni backslash.
-
03 Un escape esadecimale \x
JSON ha solo \uXXXX. \x41 deve diventare \u0041.
Lo stesso errore in altri runtime
Il problema di fondo è identico; cambia solo la formulazione. Se un collega segnala uno di questi messaggi, sta guardando esattamente la stessa cosa che vedi tu.
| JavaScript (V8) | Bad escaped character in JSON at position 9 (line 1 column 10) |
|---|
Domande frequenti
- Perché la stessa stringa funziona in un posto e in un altro no?
- Dipende da quanti literal di stringa attraversa. Un percorso scritto direttamente in un file .json richiede un livello di raddoppio. Lo stesso percorso dentro un literal Python dentro un argomento di shell può richiederne tre.
- È la stessa cosa del SyntaxWarning sulle sequenze di escape non valide?
- No, ed è facile confonderli. Quel warning è Python che si lamenta del tuo codice sorgente, prima ancora che ci sia di mezzo del JSON. Questo errore arriva dal parser JSON e riguarda il contenuto della stringa.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Esegui l’escape correttamente