Microsoft SQL Server
DLA JSONA
Szukaj…
DLA JSON PATH
Formatuje wyniki zapytania SELECT jako tekst JSON. Klauzula FOR JSON PATH jest dodawana po zapytaniu:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
Nazwy kolumn będą używane jako klucze w JSON, a wartości komórek zostaną wygenerowane jako wartości JSON. Wynikiem zapytania byłaby tablica obiektów JSON:
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
Wartości NULL w kolumnie principal_id zostaną zignorowane (nie zostaną wygenerowane).
DLA ŚCIEŻKI JSON z aliasami kolumn
FOR JSON PATH umożliwia sterowanie formatem wyjściowego JSON za pomocą aliasów kolumn:
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
Alias kolumny zostanie użyty jako nazwa klucza. Aliasy kolumn rozdzielone kropkami (data.name i data.type) zostaną wygenerowane jako zagnieżdżone obiekty. Jeśli dwie kolumny mają ten sam przedrostek w notacji kropkowej, zostaną zgrupowane razem w jednym obiekcie (dane w tym przykładzie):
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
Klauzula FOR JSON bez opakowania tablicy (pojedynczy obiekt na wyjściu)
Opcja WITHOUT_ARRAY_WRAPPER umożliwia wygenerowanie pojedynczego obiektu zamiast tablicy. Użyj tej opcji, jeśli wiesz, że zwrócisz pojedynczy wiersz / obiekt:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
W tym przypadku zostanie zwrócony pojedynczy obiekt:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
Klauzula FOR JSON ignoruje wartości NULL w komórkach. Jeśli chcesz wygenerować „klucz”: pary zerowe dla komórek zawierających wartości NULL, dodaj opcję INCLUDE_NULL_VALUES w zapytaniu:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
Wygenerowane zostaną wartości NULL w kolumnie principal_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}
]
Zawijanie wyników za pomocą obiektu ROOT
Zawija tablicę JSON w dodatkowy obiekt główny z określonym kluczem:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
Wynikiem zapytania byłaby tablica obiektów JSON wewnątrz obiektu opakowania:
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
DLA JSON AUTO
Automatyczne zagnieżdżanie wartości z drugiej tabeli jako zagnieżdżonej podgrupy obiektów 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
Wynikiem zapytania będzie tablica obiektów 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"}
]
}
]
Tworzenie niestandardowej zagnieżdżonej struktury JSON
Jeśli potrzebujesz złożonej struktury JSON, której nie można utworzyć za pomocą FOR JSON PATH lub FOR JSON AUTO, możesz dostosować dane wyjściowe JSON, umieszczając podzapytania FOR JSON jako wyrażenia kolumnowe:
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
Każde pod-zapytanie wygeneruje wynik JSON, który zostanie zawarty w głównej zawartości JSON.