O JSON utiliza um conjunto específico de sequências de escape para incluir caracteres especiais dentro de strings. Se a sua string contiver aspas duplas, uma barra invertida ou caracteres de controle, você precisa escapá-los para que o JSON seja válido. Entender o escape de JSON é essencial para gerar saídas JSON corretas e depurar payloads JSON malformados.
Sequências de Escape do JSON
| Caractere | Sequência de escape | Descrição |
|---|---|---|
" |
\" |
Aspas duplas |
\ |
\\ |
Barra invertida |
/ |
\/ |
Barra normal |
\b |
\\b |
Retrocesso |
\f |
\\f |
Avanço de página |
\n |
\\n |
Nova linha |
\r |
\\r |
Retorno de carro |
\t |
\\t |
Tabulação |
\uXXXX |
\\uXXXX |
Caractere Unicode por código hexadecimal |
Quando o Escape É Necessário
Se você inserir uma string gerada pelo usuário em um payload JSON, precisará escapá-la. Considere um objeto JSON em que um campo de nome contém aspas duplas:
{"name": "John "The Man" Doe"}
Esse JSON é inválido porque as aspas duplas dentro do valor encerram a string prematuramente. A saída correta é:
{"name": "John \"The Man\" Doe"}
Métodos Específicos de Cada Linguagem
JavaScript
O JavaScript oferece JSON.stringify(), que escapa strings automaticamente.
const user = { name: 'John "The Man" Doe' };
const json = JSON.stringify(user);
console.log(json);
// Saída: {"name":"John \"The Man\" Doe"}
// Escape manual (raramente necessário)
function escapeJson(str) {
return str
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\n/g, '\\n')
.replace(/\r/g, '\\r')
.replace(/\t/g, '\\t')
.replace(/\f/g, '\\f');
}
// Desescape
function unescapeJson(str) {
return JSON.parse(`"${str}"`);
}
PHP
// Automático via json_encode
$data = ['name' => 'John "The Man" Doe'];
echo json_encode($data);
// Saída: {"name":"John \"The Man\" Doe"}
// Escape manual
$escaped = addslashes('John "The Man" Doe');
echo $escaped;
// Saída: John \"The Man\" Doe
// A flag JSON_UNESCAPED_UNICODE preserva Unicode
echo json_encode(['emoji' => '😀'], JSON_UNESCAPED_UNICODE);
// Saída: {"emoji":"😀"}
Python
import json
# Automático via json.dumps
data = {"name": 'John "The Man" Doe'}
print(json.dumps(data))
# Saída: {"name": "John \"The Man\" Doe"}
# Impressão formatada com escape
print(json.dumps(data, indent=2))
# A flag ensure_ascii escapa Unicode
print(json.dumps({"emoji": "😀"}, ensure_ascii=True))
# Saída: {"emoji": "\ud83d\ude00"}
Ruby
require 'json'
data = { name: 'John "The Man" Doe' }
puts JSON.generate(data)
# Saída: {"name":"John \"The Man\" Doe"}
# Ou com formatação indentada
puts JSON.pretty_generate(data)
Erros Comuns
Escape duplo acontece quando você escapa uma string que já está escapada. A sequência \\" se transforma em \\\\\\" se for escapada novamente, e o JSON fica corrompido.
Falta de escapes Unicode para caracteres não ASCII. Embora o JSON suporte Unicode diretamente em ambientes UTF-8, alguns parsers antigos esperam sequências \uXXXX. A flag ensure_ascii no Python controla esse comportamento.
Não escapar caracteres de controle. Um caractere de nova linha bruto dentro de uma string JSON é inválido. Sempre use \n.
Ferramenta Online
A ferramenta Escape e Desescape de JSON do Help2Code faz o escape e o desescape instantaneamente. Cole a sua string, escolha a direção e copie o resultado. É a forma mais rápida de escapar uma string para incluí-la em um payload JSON.
Escape em Contextos Aninhados
Quando o JSON é incorporado em outro formato, como HTML ou uma URL, você precisa de várias camadas de escape. Uma string JSON dentro do valor de um atributo HTML precisa passar pelo escape de JSON e depois pela codificação de entidades HTML:
<div data-config='{"name":"John "The Man" Doe"}'>
O JSON usa \" para as aspas e, em seguida, o atributo HTML usa " para a string JSON. As duas camadas são necessárias para produzir uma saída válida.
Conclusão
Um escape de JSON adequado garante que os seus dados sejam serializados corretamente e que os parsers JSON não travem diante de caracteres especiais. Em código de produção, prefira as funções de serialização JSON nativas da sua linguagem em vez do escape manual. Para tarefas rápidas de escape, a ferramenta online Escape e Desescape de JSON é a opção mais rápida.