Escape / unescape de strings JSON
JSONEscapa e desescapa strings JSON — aspas, caracteres de controle e \uXXXX.
Nesta página
O que é o escape de strings JSON?#
Dentro de um documento JSON, uma string tem de ficar entre aspas duplas — e isso cria um problema no momento em que o próprio texto contém uma aspa, uma mudança de linha ou uma barra invertida. Se os colocasse à bruta, o parser veria a aspa de fecho demasiado cedo, ou trataria \ como o início de um escape que não compreende. Fazer escape é o ato de substituir esses caracteres pelas sequências curtas de barra invertida que a especificação JSON define: \" para uma aspa, \\ para uma barra invertida, \n para uma mudança de linha, \t para uma tabulação, entre mais algumas. Desfazer escape é o inverso — transformar essas sequências de volta nos caracteres originais.
Existe um segundo modo, mais agressivo. Alguns sistemas antigos — log shippers mais velhos, bases de dados restritivas, camadas de transporte que assumem ASCII puro — engasgam com qualquer byte acima de 127. Para esses, o JSON também permite escrever qualquer carácter não-ASCII como \uXXXX (e caracteres astrais como os emojis como um par de substitutos UTF-16). O texto continua a ser JSON válido; só acontece que, depois do escape, é composto inteiramente por ASCII.
Esta página faz ambas as direções e ambos os modos: faz escape de uma string em bruto para um literal de string JSON válido, ou desfaz o escape de um literal de volta ao texto original — com um interruptor opcional Somente ASCII que força todos os pontos de código não-ASCII para a forma \uXXXX.
Como usar#
- Escolha a direção com o interruptor Codificar / Decodificar no canto superior esquerdo da barra de ferramentas. Codificar faz escape de texto em bruto para um literal JSON; Decodificar desfaz o escape de um literal de volta para texto.
- Escreva ou cole no painel Entrada à esquerda.
- Em Codificar, todo o texto torna-se um literal de string JSON (incluindo as aspas envolventes).
- Em Decodificar, pode colar tanto um literal com aspas (
"a\nb") como apenas o corpo escapado, sem aspas (a\nb) — a ferramenta envolve-o em aspas por si. Um número, booleano ou objeto JSON válido é rejeitado como “não é uma string” em vez de ser silenciosamente coercioado.
- Marque Saída somente ASCII (\uXXXX) (modo Codificar) quando o consumidor a jusante não consegue lidar com bytes não-ASCII. Caracteres astrais como os emojis são emitidos como um par de substitutos próprio, exatamente como
JSON.stringifyfaria. - O resultado aparece em tempo real no painel Saída. Clique em Copiar para o recolher.
- Exemplo insere uma string de demonstração em vários idiomas; Limpar repõe ambos os painéis.
Principais funcionalidades#
- Formas curtas exatas conforme a especificação. Usa precisamente as sequências exigidas pelo RFC 8259 (
\",\\,\b,\f,\n,\r,\t) e\uXXXXpara todo o resto abaixo de 0x20 — correspondendo aJSON.stringifybyte a byte. - Modo somente ASCII real. Os caracteres não-ASCII não são silenciosamente removidos nem corrompidos em mojibake; cada um é emitido como
\uXXXX, e os caracteres astrais (acima de U+FFFF) tornam-se um par de substitutos UTF-16 correto, não uma unidade de código solitária e partida que os decodificadores rejeitam. - Desfazer escape tolerante. Aceita tanto um literal totalmente com aspas como um corpo escapado sem aspas, pelo que fragmentos colados a meio de uma linha de registro continuam a decodificar em vez de lançarem erros.
- Recusa adivinhar. Se a entrada decodificada é JSON válido mas não uma string (por exemplo um número solto ou um array), a ferramenta diz-lho em vez de a transformar em string às escondidas.
Exemplo prático#
Carregue em Exemplo no modo Codificar e a entrada é uma string que mistura deliberadamente aspas, um caminho com barras invertidas, uma mudança de linha, um sinal de copyright, um emoji e chinês:
He said "hi"
\path\ © 🌍 你好
Sem Somente ASCII, o literal escapado mantém os caracteres legíveis de forma literal e apenas coloca entre aspas o que tem de estar:
"He said \"hi\"\n\\path\\ © 🌍 你好"
Agora marque Saída somente ASCII (\uXXXX) e a mesma entrada torna-se ASCII puro — o sinal de copyright colapsa para a forma de quatro caracteres \u00a9, o emoji do globo para o par de substitutos \ud83c\udf0d, e cada carácter chinês para o seu próprio ponto de código (\u4f60, \u597d):
"He said \"hi\"\n\\path\\ \u00a9 \ud83c\udf0d \u4f60\u597d"
Mude para Decodificar e cole qualquer um desses literais de volta: o texto original — incluindo o emoji e o chinês — é restaurado exatamente.
FAQ#
Porque é que o emoji se transforma em dois códigos \u em vez de um?#
Caracteres acima de U+FFFF (emojis, extensões raras de CJK, alguns símbolos matemáticos) não cabem numa única unidade de código de 16 bits, pelo que o UTF-16 os representa como um par de substitutos — um substituto alto seguido de um substituto baixo. O emoji do globo 🌍 (U+1F30D) torna-se \ud83c\udf0d. Emitir apenas um \u produziria JSON inválido que os decodificadores estritos rejeitam; esta ferramenta emite o par exatamente como JSON.stringify faz, pelo que o resultado faz a viagem completa (round-trip).
A decodificação diz “A entrada não é uma string JSON.” O que é que colei?#
Colou algo que é JSON válido mas não uma string — tipicamente um número solto (42), um booleano (true) ou um objeto/array. A ferramenta recusa transformá-lo em string porque isso esconderia um erro real (quase de certeza que queria colar o valor da string, não o documento inteiro). Coloque o texto entre aspas e tente de novo.
Isto lida com caracteres de controlo como uma tabulação literal ou um aviso (bell)?#
Sim. Uma tabulação literal na entrada se torna \t, um backspace \b, um form feed \f, um carriage return \r; qualquer outro código de controlo abaixo de U+0020 (incluindo o bell, 0x07) torna-se um código no estilo \u0007. Isso importa porque os caracteres de controlo em bruto são ilegais dentro de strings JSON e alguns parsers rejeitam-nos frontalmente.
A saída somente ASCII é “mais segura”?#
Apenas para um tipo específico de segurança: sobreviver a uma camada de transporte que corrompe ou rejeita bytes não-ASCII. Não é uma medida de segurança — os dados continuam a ser totalmente reversíveis, apenas expressos num alfabeto mais restritivo. Use quando um consumidor exige ASCII; deixe desativado nos restantes casos, já que a forma legível é muito mais fácil de depurar.