Поиск…


ДЛЯ 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.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow