Microsoft SQL Server
FÖR JSON
Sök…
FÖR JSON PATH
Formaterar resultaten från SELECT-frågan som JSON-text. FÖR JSON PATH-klausulen läggs till efter frågan:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
Kolumnnamn kommer att användas som nycklar i JSON, och cellvärden kommer att genereras som JSON-värden. Resultatet av frågan skulle vara en matris med JSON-objekt:
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
NULL-värden i kolumnen princip_id ignoreras (de kommer inte att genereras).
FÖR JSON PATH med kolumnalias
FÖR JSON PATH gör att du kan styra formatet för utgången JSON med hjälp av kolumnalias:
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
Kolumnalias kommer att användas som nyckelnamn. Punkt-separerade kolumnalias (data.name och data.type) kommer att genereras som kapslade objekt. Om två kolumner har samma prefix i punktnotation, kommer de att grupperas i ett enda objekt (data i det här exemplet):
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
FÖR JSON-klausul utan matrisomslag (enda objekt i utgång)
MED Alternativet_ARRAY_WRAPPER kan du generera ett enda objekt istället för arrayen. Använd det här alternativet om du vet att du kommer att returnera en rad / objekt:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
Enstaka objekt kommer att returneras i det här fallet:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
FOR JSON-klausulen ignorerar NULL-värden i celler. Om du vill generera "nyckel": nullpar för celler som innehåller NULL-värden, lägg till alternativet INCLUDE_NULL_VALUES i frågan:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
NULL-värden i kolumnen princip_id kommer att genereras:
[
{"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}
]
Inpackning av resultat med ROOT-objekt
Wraps returnerade JSON-array i ytterligare rotobjekt med angiven nyckel:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
Resultatet av frågan skulle vara matris med JSON-objekt inuti wrapperobjektet:
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
FÖR JSON AUTO
Kapslar automatiskt värden från den andra tabellen som en kapslad underuppsättning av JSON-objekt:
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
Resultatet av frågan skulle vara matris med JSON-objekt:
[
{
"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"}
]
}
]
Skapa anpassad kapslad JSON-struktur
Om du behöver någon komplex JSON-struktur som inte kan skapas med FOR JSON PATH eller FOR JSON AUTO, kan du anpassa din JSON-utgång genom att sätta FOR JSON-undersökningar som kolumnuttryck:
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
Varje underfråga kommer att producera JSON-resultat som kommer att inkluderas i JSONs huvudinnehåll.