Como o FOR JSON ignora os caracteres especiais e os caracteres de controle (SQL Server)

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure 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"
    }
]

Próximas etapas