Microsoft SQL Server
FÜR JSON
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.