Como o FOR JSON ignora os caracteres especiais e os caracteres de controle (SQL Server)
Aplica-se a: SQL Server 2016 (13.x) e posteriores Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics (somente pool de SQL sem servidor)
Esse artigo descreve como a cláusula FOR JSON
de uma instrução SELECT
do SQL Server ignora os caracteres especiais e representa os caracteres de controle na saída JSON.
Importante
Esse artigo descreve o suporte interno para JSON no Microsoft SQL Server. Para obter informações gerais sobre como fazer o escape e a codificação em JSON, veja a Seção 2.5 da RFC do JSON.
Ignorar os caracteres especiais
Se os dados de origem tiverem caracteres especiais, a cláusula FOR JSON
os ignorará na saída JSON com \
, conforme mostrado na tabela a seguir. Este escape ocorre nos nomes das propriedades e em seus valores.
Caractere especial | Saída de escape |
---|---|
Aspas (" ) |
\" |
Barra invertida (\ ) |
\\ |
Barra (/ ) |
\/ |
Backspace | \b |
Avanço de formulário | \f |
Nova linha | \n |
Retorno de carro | \r |
Guia horizontal | \t |
Caracteres de controle
Se os dados de origem tiverem caracteres de controle, a cláusula FOR JSON
fará a codificação na saída JSON no formato \u<code>
, conforme mostrado na tabela a seguir.
Caractere de controle | Saída codificada |
---|---|
CHAR(0) | \u0000 |
CHAR(1) | \u0001 |
... | ... |
CHAR(31) | \u001f |
Exemplo
Aqui está um exemplo da saída FOR JSON
para os dados de origem que inclui caracteres especiais e caracteres de controle.
Consulta:
SELECT 'VALUE\ /
"' AS [KEY\/"],
CHAR(0) AS '0',
CHAR(1) AS '1',
CHAR(31) AS '31'
FOR JSON PATH;
Resultado:
[
{
"KEY\\\/\"": "VALUE\\ \/\r\n \"",
"0": "\u0000",
"1": "\u0001",
"31": "\u001f"
}
]