Suche…


FÜR JSON PATH

Formatiert die Ergebnisse der SELECT-Abfrage als JSON-Text. Die FOR JSON PATH-Klausel wird nach der Abfrage hinzugefügt:

SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH

Spaltennamen werden in JSON als Schlüssel verwendet, und Zellenwerte werden als JSON-Werte generiert. Ergebnis der Abfrage wäre ein Array von JSON-Objekten:

[
  {"object_id":3,"name":"sysrscols","type":"S "},       
  {"object_id":5,"name":"sysrowsets","type":"S "},
  {"object_id":6,"name":"sysclones","type":"S "}
]

NULL-Werte in der Prinzipal_id-Spalte werden ignoriert (sie werden nicht generiert).

FOR JSON PATH mit Spaltenaliasnamen

Mit FOR JSON PATH können Sie das Format der Ausgabe-JSON mithilfe von Spaltenaliasnamen steuern:

SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH

Spaltenalias wird als Schlüsselname verwendet. Punktgetrennte Spaltenaliase (data.name und data.type) werden als verschachtelte Objekte generiert. Wenn zwei Spalten das gleiche Präfix in Punktnotation haben, werden sie in einem einzelnen Objekt zusammengefasst (Daten in diesem Beispiel):

[
  {"id":3,"data":{"name":"sysrscols","type":"S "}},
  {"id":5,"data":{"name":"sysrowsets","type":"S "}},
  {"id":6,"data":{"name":"sysclones","type":"S "}}
]

FOR JSON-Klausel ohne Array-Wrapper (einzelnes Objekt in Ausgabe)

Mit der Option WITHOUT_ARRAY_WRAPPER können Sie ein einzelnes Objekt anstelle des Arrays generieren. Verwenden Sie diese Option, wenn Sie wissen, dass Sie eine einzelne Zeile / ein einzelnes Objekt zurückgeben werden:

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER

Ein einzelnes Objekt wird in diesem Fall zurückgegeben:

{"object_id":3,"name":"sysrscols","type":"S "}

INCLUDE_NULL_VALUES

Die FOR JSON-Klausel ignoriert NULL-Werte in Zellen. Wenn Sie "Schlüssel": Null-Paare für Zellen erzeugen möchten, die NULL-Werte enthalten, fügen Sie die Option INCLUDE_NULL_VALUES zur Abfrage hinzu:

SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES

Es werden NULL-Werte in der principal_id-Spalte generiert:

[
  {"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}
]

Ergebnisse mit ROOT-Objekt umschließen

Wraps Zurückgegebenes JSON-Array in einem zusätzlichen Stammobjekt mit dem angegebenen Schlüssel:

SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')

Ergebnis der Abfrage wäre ein Array von JSON-Objekten im Wrapper-Objekt:

{
  "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

Verschachtelt Werte aus der zweiten Tabelle automatisch als verschachteltes Unterarray von JSON-Objekten:

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

Ergebnis der Abfrage wäre ein Array von JSON-Objekten:

[
  {
   "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"}
     ]
  }
]

Erstellen einer benutzerdefinierten geschachtelten JSON-Struktur

Wenn Sie eine komplexe JSON-Struktur benötigen, die nicht mit FOR JSON PATH oder FOR JSON AUTO erstellt werden kann, können Sie Ihre JSON-Ausgabe anpassen, indem Sie FOR JSON-Unterabfragen als Spaltenausdrücke verwenden:

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

Jede Unterabfrage erzeugt ein JSON-Ergebnis, das in den Hauptinhalt von JSON aufgenommen wird.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow