Поделиться через


Как FOR JSON экранирует специальные и управляющие символы

Относится к: SQL Server 2016 (13.x) и более поздних версиях; Azure SQL Database,Azure SQL Managed Instance,Azure Synapse Analytics (только для serverless SQL pool), SQL аналитический конечный пункт в Microsoft Fabric; Склад в Microsoft Fabric,SQL база данных в Microsoft Fabric

В этой статье описывается, как клауза FOR JSON оператора SQL Server SELECT экранирует специальные символы и обозначает символы управления в выходных данных JSON.

В этой статье описывается встроенная поддержка JSON в Microsoft SQL Server. Для общей информации о экранировании и кодировании в формате JSON см. раздел 2.5 JSON RFC.

Экранирование специальных символов

Если исходные данные содержат специальные символы, оператор FOR JSON экранирует их в выходных данных JSON, как показано в следующей таблице. Такое экранирование происходит как в именах свойств, так и в их значениях.

Специальный знак Экранированные выходные данные
Кавычка (") \"
Обратная косая черта (\) \\
Косая черта (/) \/
Backspace \b
Подача формы \f
Новая строка \n
Возврат каретки \r
Горизонтальная вкладка \t

Управляющие символы

Если исходные данные содержат символы элемента управления, FOR JSON предложение кодирует их в выходных данных JSON в \u<code> формате, как показано в следующей таблице.

Управляющий символ Закодированные выходные данные
CHAR(0) \u0000
CHAR(1) \u0001
... ...
CHAR(31) \u001f

Example

Ниже приведен пример FOR JSON выходных данных для исходных данных, включающих как специальные символы, так и управляющие символы.

Query:

SELECT 'VALUE\    /
  "' AS [KEY\/"],
    CHAR(0) AS '0',
    CHAR(1) AS '1',
    CHAR(31) AS '31'
FOR JSON PATH;

Result:

[
    {
        "KEY\\\/\"": "VALUE\\    \/\r\n  \"",
        "0": "\u0000",
        "1": "\u0001",
        "31": "\u001f"
    }
]