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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow