Vai al contenuto
jsonbeautifiers
Italiano
Java Testo del messaggio trascritto da casi segnalati; non eseguito qui.

Illegal unquoted character ((CTRL-CHAR, code 10))

Una stringa del documento contiene un carattere di controllo letterale. Il codice 10 è un a capo, il 13 un ritorno a capo, il 9 una tabulazione. JSON richiede che abbiano l’escape, e Jackson fa bene a rifiutarli. È lo stesso problema di fondo che V8 chiama «bad control character».

Incolla il tuo JSON e vedi esattamente dove si rompe

Input

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.

  1. 01 Testo su più righe incorporato in una stringa

    SQL, stack trace, righe di log e contenuti da template contengono tutti veri a capo.

    Si rompe

    { "query": "SELECT *
    FROM users" }

    Funziona

    { "query": "SELECT *\nFROM users" }
  2. 02 JSON costruito per concatenazione

    I valori interpolati non ricevono l’escape. Serializza con ObjectMapper.writeValueAsString invece di assemblare il testo a mano.

    Si rompe

    String body = "{\"note\": \"" + note + "\"}";

    Funziona

    String body = mapper.writeValueAsString(Map.of("note", note));
  3. 03 Fine riga di Windows dentro un valore

    Il ritorno a capo, codice 13, è un carattere di controllo a sé e richiede \r.

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)
Python Invalid control character at: line 1 column 8 (char 7)

Domande frequenti

E ALLOW_UNESCAPED_CONTROL_CHARS?
JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS fa sì che Jackson li accetti, ed è un rimedio ragionevole quando non puoi modificare chi produce il JSON. Non rende però il documento JSON valido, quindi qualunque altro consumatore continuerà a fallire.

Risolvilo adesso

Incolla il payload nello strumento qui sopra, oppure vai direttamente a quello creato per questo compito.

Esegui l’escape del valore