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


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

применимо к: SQL Server 2016 (13.x) и более поздним версиям Базе данных SQL AzureУправляемому экземпляру SQL AzureAzure Synapse Analytics (только бессерверный пул SQL)конечной точке аналитики SQL в хранилище microsoft Fabricв Microsoft Fabric

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

Внимание

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

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

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

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

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

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

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

Пример

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

Запрос:

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

Результат :

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