Vai al contenuto
jsonbeautifiers
Italiano

Unescape JSON

Riporta a JSON leggibile una stringa con escape, per quanti livelli abbia.

Con escape
Decodificato

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

Prendi una stringa JSON con escape e riottieni il testo originale. Le virgolette che la racchiudono vengono tolte se ci sono, le sequenze di escape vengono decodificate, e \uXXXX diventa il carattere che indica.

Conta anche quanti strati di codifica ha un valore, perché un payload passato due volte per JSON.stringify è un bug di API comune, oltre che illeggibile.

La doppia codifica, e come riconoscerla

Un valore che è stato serializzato, messo in un campo di testo e serializzato di nuovo arriva come un groviglio di backslash. Serializzato una terza volta, raddoppia ancora.

Questo strumento rileva il numero di strati e propone di toglierli tutti. La causa abituale è un servizio che archivia un payload come testo e poi lo restituisce dentro una busta JSON senza averlo decodificato, oppure un client che chiama stringify su qualcosa di già stringificato.

Che cosa segnala invece di indovinare

Una sequenza di escape non valida è un avviso, non una decisione silenziosa. \x41 non è JSON valido, e uno strumento che lo trasformasse zitto zitto in A starebbe inventando un significato che il documento non ha. Ottieni la posizione e una spiegazione, e il backslash viene scartato perché il resto del testo sopravviva.

Se il risultato decodificato è a sua volta JSON valido, viene segnalato anche questo: è il modo più rapido per confermare che hai finito di sbucciare.

How to do this in code

Fare l’unescape nel codice.

js JavaScript
// If the value includes its quotes, parse it as a JSON string
const text = JSON.parse('"line one\\nline two"');

// Peel every layer of encoding
function fullyDecode(value) {
  let out = value;
  for (let i = 0; i < 8 && typeof out === 'string'; i++) {
    try { out = JSON.parse(out); } catch { break; }
  }
  return out;
}
py Python

unicode_escape è la risposta che si trova per prima ed è sbagliata per qualsiasi cosa non ASCII.

import json

text = json.loads('"line one\\nline two"')

# Standard library, without the surrounding quotes
text = bytes(raw, 'utf-8').decode('unicode_escape')
# Note: unicode_escape assumes Latin-1 for bytes above 127,
# so it mangles non-ASCII. json.loads is the correct route.
sh jq

fromjson è la funzione integrata di jq pensata esattamente per il caso della doppia codifica.

# Decode a JSON string to raw text
jq -r . <<< '"line one\nline two"'

# Peel a doubly encoded field
jq -r '.payload | fromjson' response.json

Domande frequenti

Perché il mio output ha ancora dei backslash?
Perché era codificato più di una volta. Attiva «togli tutti gli strati», oppure rilancia lo strumento sul suo stesso output finché il conteggio non arriva a zero.
Che cosa significa se il risultato è JSON valido?
Che la stringa conteneva un documento JSON invece di testo semplice. È il caso della doppia codifica, e lo strumento lo dice esplicitamente.