Microsoft SQL Server
ДЛЯ JSON
Поиск…
ДЛЯ JSON PATH
Форматирует результаты запроса SELECT как текст JSON. Предложение JSON PATH добавляется после запроса:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
Имена столбцов будут использоваться как ключи в JSON, а значения ячеек будут генерироваться как значения JSON. Результатом запроса будет массив объектов JSON:
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
Значения NULL в столбце main_id будут игнорироваться (они не будут сгенерированы).
ДЛЯ JSON PATH с псевдонимами столбцов
Для JSON PATH вы можете управлять форматом вывода JSON с использованием псевдонимов столбцов:
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
В качестве имени ключа будет использоваться псевдоним столбца. Атрибуты столбцов с разделителями в точках (data.name и data.type) будут генерироваться как вложенные объекты. Если два столбца имеют один и тот же префикс в точечной нотации, они будут сгруппированы в один объект (данные в этом примере):
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
Для предложения JSON без оболочки массива (отдельный объект на выходе)
Параметр WITHOUT_ARRAY_WRAPPER позволяет вам генерировать один объект вместо массива. Используйте этот параметр, если вы знаете, что вернете одну строку / объект:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
В этом случае возвращается один объект:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
Для предложения JSON игнорирует значения NULL в ячейках. Если вы хотите сгенерировать «ключ»: нулевые пары для ячеек, которые содержат значения NULL, добавьте параметр INCLUDE_NULL_VALUES в запрос:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
Значения NULL в столбце main_id будут сгенерированы:
[
{"object_id":3,"name":"sysrscols","type":"S ","principal_id":null},
{"object_id":5,"name":"sysrowsets","type":"S ","principal_id":null},
{"object_id":6,"name":"sysclones","type":"S ","principal_id":null}
]
Обрезка результатов с помощью объекта ROOT
Wraps возвращает массив JSON в дополнительный корневой объект с указанным ключом:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
Результатом запроса будет массив объектов JSON внутри объекта-обертки:
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
ДЛЯ JSON AUTO
Автоматически вставляет значения из второй таблицы в виде вложенного подматрица объектов JSON:
SELECT top 5 o.object_id, o.name, c.column_id, c.name
FROM sys.objects o
JOIN sys.columns c ON o.object_id = c.object_id
FOR JSON AUTO
Результатом запроса будет массив объектов JSON:
[
{
"object_id":3,
"name":"sysrscols",
"c":[
{"column_id":12,"name":"bitpos"},
{"column_id":6,"name":"cid"}
]
},
{
"object_id":5,
"name":"sysrowsets",
"c":[
{"column_id":13,"name":"colguid"},
{"column_id":3,"name":"hbcolid"},
{"column_id":8,"name":"maxinrowlen"}
]
}
]
Создание пользовательской вложенной структуры JSON
Если вам нужна сложная структура JSON, которая не может быть создана с помощью FOR JSON PATH или FOR JSON AUTO, вы можете настроить свой вывод JSON, поставив подзапросы FOR JSON в виде выражений столбца:
SELECT top 5 o.object_id, o.name,
(SELECT column_id, c.name
FROM sys.columns c WHERE o.object_id = c.object_id
FOR JSON PATH) as columns,
(SELECT parameter_id, name
FROM sys.parameters p WHERE o.object_id = p.object_id
FOR JSON PATH) as parameters
FROM sys.objects o
FOR JSON PATH
Каждый подзапрос даст результат JSON, который будет включен в основной контент JSON.