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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow