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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow