Português (Brasil)

Ferramentas para desenvolvedores · Formatador e validador JSON

JSON escapes de string explicados: \n, \uXXXX e caracteres de controle

· Como funciona

JSON fluxo de trabalho do desenvolvedor validação

JSON escapes de string explicados: \n, \uXXXX e caracteres de controle ilustrados com tokens JSON e um limite de validação preciso
Ilustração vetorial original ToolAcre

Uma nova linha bruta dentro de uma string JSON é inválida, assim como uma guia. Esta postagem cobre as oito sequências de escape, como \u escapa e pares substitutos funcionam e por que um parágrafo colado pode invalidar um arquivo inteiro.

O parágrafo que quebrou a carga útil

O parágrafo que quebrou a carga útil - colar uma quebra de linha visível em uma descrição entre aspas insere um caractere de controle diretamente na string JSON. A primeira linha parece completa, mas a citação de abertura ainda espera conteúdo de string ou uma citação de fechamento. Quando o analisador atinge a alimentação de linha bruta, ele para aí porque as strings JSON não podem abranger linhas físicas dessa maneira. O texto deve conter o escape de dois caracteres `\n` sempre que o valor decodificado precisar de uma nova linha.

Guias copiadas de um documento ou planilha causam o mesmo tipo de falha, mesmo que um editor possa processá-las como espaçamentos inofensivos. Substitua uma tabulação literal por `\t`, um retorno de carro por `\r` e outros controles proibidos por seus escapes nomeados ou Unicode.

As oito saídas JSON permitem

Os oito escapes JSON permitem - após uma barra invertida, os formatos curtos são `"`, `\\`, `\/`, `\b`, `\f`, `\n`, `\r` e `\t`. Eles representam aspas, barra invertida, barra, retrocesso, avanço de formulário, avanço de linha, retorno de carro e tabulação horizontal. Uma barra também pode aparecer sem escape; `\/` existe principalmente para compatibilidade com contextos que antes tratavam especialmente uma sequência de script de fechamento.

Nenhuma outra letra pode seguir uma barra invertida JSON. Sequências familiares de linguagens de programação, como `\v`, `\0`, `\x41` ou uma barra invertida seguida por uma nova linha física, são inválidas aqui. Use `\u` seguido por exatamente quatro dígitos hexadecimais quando não existir nenhum escape curto. Este pequeno vocabulário fixo mantém as strings JSON portáveis: um consumidor não precisa de JavaScript, Python ou regras de escape específicas do shell para determinar os caracteres representados pelo texto válido.

Por que uma tabulação literal é inválida, mas um é literal é adequado

Por que uma tabulação literal é inválida, mas um é literal é adequado - JSON proíbe pontos de código sem escape de U+0000 até U+001F dentro de strings. Esse intervalo contém guias, novas linhas e outros controles cujos efeitos invisíveis podem atrapalhar o enquadramento ou a exibição. A letra `é` é U+00E9, bem fora da faixa de controle, então UTF-8 JSON pode incluí-la diretamente entre aspas. O mesmo se aplica à maioria dos scripts, símbolos e emojis.

Escapar do Unicode comum é, portanto, opcional e não um requisito de limpeza. `"café"` e `"caf\u00e9"` decodificam para a mesma sequência de caracteres. O texto direto geralmente é mais fácil de ser lido pelas pessoas, enquanto os escapes podem ajudar um transporte somente ASCII ou tornar visível uma unidade de código específica. Os personagens de controle são diferentes: sua fuga é obrigatória.

Como funcionam as fugas \uXXXX

Como funcionam os escapes `\uXXXX` - o `u` deve ser seguido por exatamente quatro dígitos hexadecimais, usando 0–9 ou A–F em ambos os casos. `\u00E9` representa a unidade de código UTF-16 para `é` e `\u000A` representa um feed de linha. Menos dígitos, colchetes como `\u{1F600}` ou uma letra não hexadecimal tornam JSON inválido, mesmo que outra linguagem de programação aceite essa notação.

Os caracteres acima de U+FFFF são representados nesta forma de escape como um par substituto. O emoji 😀 pode ser escrito como `\uD83D\uDE00`: o substituto alto e baixo se combinam após análise em um valor escalar Unicode. A gramática JSON pode carregar um escape substituto não pareado, mas os codificadores e aplicativos downstream podem rejeitá-lo ou substituí-lo porque não identifica um caractere Unicode completo.

Exemplo resolvido: escapando de um caminho do Windows e um trecho de HTML

Exemplo resolvido: escapando de um caminho do Windows e um trecho de HTML — o caminho pretendido `C:\Temp\report.txt` precisa de cada barra invertida dobrada na fonte JSON: `"C:\\Temp\\report.txt"`. Sem duplicação, `\T` é um escape inválido e sequências como `\r` ou `\t` podem silenciosamente se tornar caracteres de controle em vez de separadores de caminho. Construa o JSON a partir do valor pretendido, não adivinhando quais barras exibidas já pertencem a um idioma externo.

Um fragmento HTML como `<a title="Report">Open</a>` pode manter seus colchetes e barras literalmente, mas as aspas do atributo devem se tornar `\"` dentro da string JSON. Se uma nova linha separar duas tags, codifique-a como `\n`. O membro JSON resultante pode ser validado e analisado de volta ao texto HTML original.

Onde as fugas são duplicadas

Onde as fugas são duplicadas – cada gramática do texto envolvente tem sua própria chance de interpretar barras invertidas. Um documento JSON contendo a string decodificada `line1\nline2` deve escapar dessa barra invertida, produzindo `"line1\\nline2"`. Se esse texto JSON for armazenado como uma string JSON, suas aspas e ambas as barras invertidas precisarão de outra camada de escape. A aparente desordem registra múltiplas representações, não uma forma estendida especial de JSON.

Shells e literais de linguagem de programação adicionam suas próprias regras de cotação antes que um analisador JSON veja o argumento. Diagnosticar de dentro para fora: escreva primeiro o valor decodificado exato, codifique-o como JSON uma vez e, em seguida, codifique o texto JSON completo para o shell circundante ou idioma de origem. Em cada limite, inspecione quais bytes ou caracteres o próximo analisador realmente recebe.

O que isso não cobre

O que isso não cobre - entidades HTML como `"` e URL codificação percentual como `%20` são transformações separadas para contextos sintáticos separados. Um analisador JSON não decodifica nenhum dos formulários. A sequência `"""` contém seis caracteres literais após a análise, não aspas, e `"%20"` contém um sinal de porcentagem seguido por dois dígitos, não um espaço. Aplique essas codificações somente quando os dados cruzarem para um componente HTML ou URL.

Esta discussão também não substitui a codificação de saída. JSON válido recebido de uma fonte não confiável ainda pode conter HTML, texto semelhante a script ou sequências de controle de terminal como dados de string comuns. O aplicativo que posteriormente renderiza ou executa um comando deve manipular esse destino com segurança. O escape de JSON protege a estrutura JSON; não é uma higienização universal.

Conclusão: fuja do que a gramática proíbe, nada mais

Conclusão: fuja do que a gramática proíbe, nada mais - aspas duplas, barras invertidas e pontos de código abaixo de U+0020 precisam de atenção dentro das strings JSON. O Unicode comum pode permanecer legível, enquanto `\uXXXX` fornece uma alternativa exata de quatro dígitos e pares substitutos representam caracteres acima de U+FFFF. Um diagnóstico em uma posição aparentemente em branco geralmente identifica uma nova linha literal, tabulação ou outro caractere de controle que deve ser substituído por seu escape textual.

Contar camadas de codificação em vez de contar barras à vista. Comece pelo valor que o aplicativo deve receber, codifique-o uma vez para JSON e só então cite o documento resultante para qualquer shell externo, arquivo de origem ou segunda string JSON. Valide o texto apresentado ao analisador JSON e, quando a correção for importante, inspecione a string decodificada posteriormente.