Ir para o conteúdo
jsonbeautifiers
Português

Desescapar JSON

Recupera JSON legível a partir de uma string escapada, por mais camadas que ela tenha.

Escapado
Decodificado

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.