Invalid control character at: line L column C (char N)
Una stringa contiene un carattere letterale sotto U+0020, di solito un vero a capo o una tabulazione. JSON richiede che abbiano l’escape. Python ha l’opzione strict=False che li accetta, ma il documento risultante resta non valido per ogni altro consumatore.
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 Testo su più righe dentro una stringa
Estratti di log, SQL, stack trace e HTML da template contengono tutti veri a capo.
Si rompe
json.loads('{"sql": "SELECT * FROM t"}')Funziona
json.loads('{"sql": "SELECT *\\nFROM t"}') -
02 JSON assemblato con f-string o per concatenazione
I valori interpolati non ricevono l’escape. Costruisci un dict e usa json.dumps, che esegue l’escape di tutto correttamente.
Si rompe
body = f'{{"note": "{note}"}}'Funziona
body = json.dumps({"note": note}) -
03 Una tabulazione copiata da un foglio di calcolo
Invisibile, e sopravvive intatta al copia e incolla.
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 control character in string literal in JSON at position 11 (line 1 column 12) |
|---|
Domande frequenti
- Che cosa fa strict=False?
- json.loads(s, strict=False) consente i caratteri di controllo dentro le stringhe. Ti sblocca, ma il documento resta JSON non valido, quindi qualunque cosa a valle che non sia Python continuerà a rifiutarlo. Sistema piuttosto chi lo produce.
Risolvilo adesso
Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.
Esegui l’escape della stringa