Escape / unescape di stringhe JSON
Applica l’escape al testo perché sia valido dentro una stringa JSON, o decodifica testo con escape in ciò che dice davvero — con posizioni d’errore esatte.
L’output apparirà qui
Cosa fa questo strumento
Una stringa JSON non può contenere virgolette doppie grezze, barre rovesciate grezze o a capo letterali: il formato ha bisogno di quei caratteri per segnare dove le stringhe iniziano e finiscono. Per questo si scrivono come sequenze di escape, e questo strumento converte tra le due forme. Incolla del testo normale e ottieni la versione con escape, pronta da inserire in JSON; cambia direzione e il testo con escape torna leggibile.
È la seconda direzione a portare qui la maggior parte delle persone: una riga di log, un messaggio d’errore o una risposta di curl arrivata come un muro di barre rovesciate. Tutto gira nel tuo browser, e conta quando ciò che stai cercando di leggere è una risposta di produzione.
Le sequenze di escape
JSON definisce un breve elenco di escape, e lo strumento usa esattamente quello — nulla di più esotico, perché tutto il resto non è JSON valido.
- \" — virgolette doppie, che altrimenti chiuderebbero la stringa.
- \\ — una singola barra rovesciata. È il motivo per cui i percorsi Windows e i pattern regex si raddoppiano.
- \n e \r — a capo e ritorno a capo carrello.
- \t — tabulazione. Esistono anche \b e \f, per backspace e avanzamento pagina.
- \/ — un escape facoltativo per la barra. Valido, mai obbligatorio; questo strumento lo accetta e non lo produce mai.
- \uXXXX — qualsiasi carattere tramite il suo codice esadecimale, il modo per scrivere i caratteri di controllo e tutto ciò che sta fuori dall’ASCII.
I caratteri di controllo — tutto ciò che sta sotto il codice 32 — non hanno alcuna forma letterale dentro una stringa JSON, quindi escono sempre come sequenze \uXXXX anche se non hai chiesto output ASCII.
Perché le barre rovesciate si moltiplicano
Il motivo più comune per ricorrere a uno strumento così è il testo a cui l’escape è stato applicato più di una volta. Ogni giro di codifica applica l’escape alle barre rovesciate introdotte dal giro precedente, così una singola virgoletta si trascina dietro una coda sempre più lunga:
original He said "hi" escaped He said \"hi\" escaped x2 He said \\\"hi\\\"
Succede quando un valore viene serializzato in JSON, quel JSON viene salvato come stringa dentro un altro documento JSON e il risultato finisce nei log. Decodificare una volta toglie uno strato; rilancia sul risultato finché il testo non si legge normalmente. Se decodifichi e restano ancora barre rovesciate, è uno strato in più reale, non un difetto della conversione.
Virgolette: valore o frammento
Un valore stringa JSON completo comprende le virgolette doppie esterne. Ma il più delle volte stai incollando dentro una stringa che esiste già nel tuo codice o nella configurazione, dove quelle virgolette sarebbero sbagliate. Per questo l’escape produce di default solo il contenuto con escape, e l’opzione «includi le virgolette esterne» le aggiunge quando vuoi un valore da incollare intero.
La decodifica non richiede questa scelta: accetta entrambe le forme. Incolla un frammento oppure un valore completo tra virgolette preso direttamente da un documento JSON, e le virgolette esterne vengono riconosciute e rimosse.
Unicode, e quando invece va usato l’escape
JSON è un formato Unicode. «שלום» e «😀» sono stringhe JSON perfettamente valide esattamente come sono scritte, e lasciarle leggibili è il comportamento predefinito qui. L’opzione \uXXXX esiste per i sistemi rimasti indietro: vecchie pipeline di log, terminali e parser che presumono l’ASCII e rovinano tutto il resto.
Un dettaglio conta quando quell’opzione è attiva. I caratteri fuori dall’intervallo di base — la maggior parte delle emoji — sono memorizzati internamente come due unità dette coppia surrogata, e il formato richiede che entrambe le metà siano scritte come escape separati. Un’emoji diventa quindi due sequenze \u e non una più lunga. Gli strumenti che sbagliano qui producono escape che nessun parser accetta: è la spiegazione abituale delle emoji che sopravvivono a un sistema e si rompono nel successivo.
Quando la decodifica fallisce
Non ogni sequenza con barra rovesciata è un escape valido. \q non significa nulla in JSON, e \u12 è un escape \u a cui manca metà delle cifre. Invece di lasciarli passare inalterati e restituire un output che sembra corretto ma non corrisponde a ciò che dicevano i tuoi dati, lo strumento si ferma e segnala riga e colonna esatte in cui inizia la sequenza difettosa.
In pratica quell’errore è informativo: un \q isolato di solito significa che il testo non era mai stato sottoposto a escape per JSON, e un \u troncato di solito significa che l’input è stato tagliato — una riga di log accorciata da un limite di lunghezza, o una copia interrotta a metà sequenza.
Domande frequenti
- Perché il mio testo ha \\" dappertutto?
- Ha subito l’escape più di una volta. Ogni passaggio applica l’escape alle barre rovesciate del precedente, così una virgoletta originale può ritrovarsi preceduta da diverse. Decodifica ripetutamente — ogni esecuzione toglie esattamente uno strato — finché il testo non si legge normalmente.
- Devo attivare le virgolette esterne?
- Solo se vuoi un valore JSON completo da incollare così com’è, per esempio come intero lato destro di una chiave. Se stai incollando dentro una stringa già presente nel tuo codice, lascia l’opzione disattivata, altrimenti ti ritroverai con virgolette dentro virgolette.
- Ebraico, arabo, cinese o emoji richiedono l’escape?
- No. Le stringhe JSON sono Unicode, quindi quei caratteri sono validi così come sono e restano leggibili per impostazione predefinita. Attiva l’opzione \uXXXX solo quando un sistema a valle pretende ASCII puro; le emoji vengono allora scritte come i loro due escape surrogati obbligatori.
- Cosa significa «sequenza di escape non valida»?
- L’input contiene una barra rovesciata seguita da qualcosa che JSON non definisce, come \q, oppure un \u senza quattro cifre esadecimali dopo. La posizione viene segnalata così puoi guardare esattamente quel punto: di solito il testo non era stato sottoposto a escape per JSON, oppure è stato troncato a metà.
- Il mio testo viene inviato da qualche parte?
- No. Sia l’escape sia la decodifica girano interamente nel tuo browser, quindi token, payload e righe di log non lasciano mai il tuo dispositivo.