Microsoft SQL Server
PER JSON
Ricerca…
PER IL PERCORSO JSON
Formatta i risultati della query SELECT come testo JSON. FOR JSON PATH clausola viene aggiunta dopo la query:
SELECT top 3 object_id, name, type, principal_id FROM sys.objects
FOR JSON PATH
I nomi delle colonne verranno utilizzati come chiavi in JSON e i valori delle celle verranno generati come valori JSON. Il risultato della query sarebbe un array di oggetti JSON:
[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
I valori NULL nella colonna principal_id verranno ignorati (non verranno generati).
PER PERCORSO JSON con alias di colonne
FOR JSON PATH consente di controllare il formato del JSON di output utilizzando gli alias di colonna:
SELECT top 3 object_id as id, name as [data.name], type as [data.type]
FROM sys.objects
FOR JSON PATH
L'alias della colonna verrà utilizzato come nome della chiave. Gli alias di colonna separati da punti (data.name e data.type) verranno generati come oggetti nidificati. Se due colonne hanno lo stesso prefisso nella notazione del punto, saranno raggruppate insieme in un singolo oggetto (dati in questo esempio):
[
{"id":3,"data":{"name":"sysrscols","type":"S "}},
{"id":5,"data":{"name":"sysrowsets","type":"S "}},
{"id":6,"data":{"name":"sysclones","type":"S "}}
]
FOR JSON clausola senza matrice wrapper (singolo oggetto in uscita)
L'opzione WITHOUT_ARRAY_WRAPPER consente di generare un singolo oggetto anziché l'array. Usa questa opzione se sai che restituirai una singola riga / oggetto:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
WHERE object_id = 3
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
Un singolo oggetto verrà restituito in questo caso:
{"object_id":3,"name":"sysrscols","type":"S "}
INCLUDE_NULL_VALUES
La clausola FOR JSON ignora i valori NULL nelle celle. Se vuoi generare "chiave": coppie nulle per le celle che contengono valori NULL, aggiungi l'opzione INCLUDE_NULL_VALUES nella query:
SELECT top 3 object_id, name, type, principal_id
FROM sys.objects
FOR JSON PATH, INCLUDE_NULL_VALUES
Verranno generati valori NULL nella colonna 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}
]
Racchiudere i risultati con l'oggetto ROOT
Gli avvolgitori hanno restituito l'array JSON nell'oggetto root aggiuntivo con la chiave specificata:
SELECT top 3 object_id, name, type FROM sys.objects
FOR JSON PATH, ROOT('data')
Il risultato della query sarebbe una matrice di oggetti JSON all'interno dell'oggetto wrapper:
{
"data":[
{"object_id":3,"name":"sysrscols","type":"S "},
{"object_id":5,"name":"sysrowsets","type":"S "},
{"object_id":6,"name":"sysclones","type":"S "}
]
}
PER JSON AUTO
Nidifica automaticamente i valori dalla seconda tabella come sub-array nidificato di oggetti 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
Il risultato della query sarebbe array di oggetti 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"}
]
}
]
Creazione di una struttura JSON nidificata personalizzata
Se è necessaria una struttura JSON complessa che non può essere creata utilizzando FOR JSON PATH o FOR JSON AUTO, è possibile personalizzare l'output JSON inserendo sotto-query FOR JSON come espressioni di colonna:
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
Ogni sottoquery produrrà risultati JSON che verranno inclusi nel contenuto principale di JSON.