Desescapar JSON
Recupera JSON legível a partir de uma string escapada, por mais camadas que ela tenha.
Nada do que você cola sai do seu navegador. A lista de permissões connect-src transforma isso em uma garantia do navegador, e não em uma promessa. Confira você mesmo
Pegue uma string JSON escapada e recupere o texto original. As aspas ao redor são removidas se existirem, as sequências de escape são decodificadas, e \uXXXX vira o caractere que ele nomeia.
Ele também conta quantas camadas de codificação um valor tem, porque um payload que passou duas vezes por JSON.stringify é um bug de API comum, e ilegível.
Codificação dupla, e como perceber
Um valor que foi serializado, colocado em um campo de texto e serializado de novo chega parecendo uma bagunça de barras invertidas. Serializado uma terceira vez, dobra outra vez.
Esta ferramenta detecta o número de camadas e se oferece para tirar todas. A causa de sempre é um serviço que guarda o payload como texto e depois o devolve dentro de um envelope JSON sem decodificar antes, ou um cliente que chama stringify em algo já stringificado.
O que ele reporta em vez de adivinhar
Uma sequência de escape inválida é um aviso, não uma decisão silenciosa. \x41 não é JSON válido, e uma ferramenta que o transformasse caladamente em A estaria inventando um significado que o documento não tem. Você recebe a posição e uma explicação, e a barra invertida é descartada para que o resto do texto sobreviva.
Se o resultado decodificado for ele mesmo JSON válido, isso também é informado, que é a forma mais rápida de confirmar que você terminou de descascar.
How to do this in code
Desescapando em código.
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 é a resposta que as pessoas acham primeiro e está errada para qualquer coisa fora do 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 é a função embutida do jq para exatamente o caso da codificação dupla.
# Decode a JSON string to raw text
jq -r . <<< '"line one\nline two"'
# Peel a doubly encoded field
jq -r '.payload | fromjson' response.json Perguntas frequentes
- Por que a minha saída ainda tem barras invertidas?
- Porque ela foi codificada mais de uma vez. Ligue "remover todas as camadas", ou rode a ferramenta de novo na própria saída até a contagem chegar a zero.
- O que significa o resultado ser JSON válido?
- Que a string continha um documento JSON em vez de texto puro. Esse é o caso da codificação dupla, e a ferramenta diz isso explicitamente.