Condividi tramite


Formattare l'output JSON annidato con la modalità PATH

Si applica a: SQL Server 2016 (13.x) e versioni successive Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo pool SQL senza server)Endpoint di analisi SQL in Microsoft FabricMagazzino in Microsoft FabricDatabase SQL in Microsoft Fabric

Per mantenere il controllo completo sull'output della clausola FOR JSON, specificare l'opzione PATH.

PATH modalità consente di creare oggetti wrapper e annidare proprietà complesse. I risultati vengono formattati sotto forma di matrice di oggetti JSON.

L'alternativa consiste nell'usare l'opzione AUTO per formattare automaticamente l'output in base alla struttura dell'istruzione SELECT.

Ecco alcuni esempi della clausola FOR JSON con l'opzione PATH. Per formattare risultati annidati, usare nomi di colonna separati da punti oppure query annidate, come illustrato negli esempi seguenti. Per impostazione predefinita, i valori Null non sono inclusi nell'output FOR JSON. Azure Data Studio è l'editor di query consigliato per le query JSON perché formatta automaticamente i risultati JSON, come illustrato in questo articolo, anziché visualizzare una stringa flat.

Esempio: nomi di colonna separati da punti

La query seguente formatta le prime cinque righe della tabella Person di AdventureWorks come JSON.

La clausola FOR JSON PATH utilizza l'alias o il nome della colonna per determinare la chiave nell'output JSON. Se un alias contiene punti, l'opzione PATH crea oggetti annidati.

Query

SELECT TOP 5   
       BusinessEntityID As Id,  
       FirstName, LastName,  
       Title As 'Info.Title',  
       MiddleName As 'Info.MiddleName'  
   FROM Person.Person  
   FOR JSON PATH   

Result

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sanchez",
    "Info": {
        "MiddleName": "J"
    }
}, {
    "Id": 2,
    "FirstName": "Terri",
    "LastName": "Duffy",
    "Info": {
        "MiddleName": "Lee"
    }
}, {
    "Id": 3,
    "FirstName": "Roberto",
    "LastName": "Tamburello"
}, {
    "Id": 4,
    "FirstName": "Rob",
    "LastName": "Walters"
}, {
    "Id": 5,
    "FirstName": "Gail",
    "LastName": "Erickson",
    "Info": {
        "Title": "Ms.",
        "MiddleName": "A"
    }
}]

Esempio: più tabelle

Se si fa riferimento a più tabelle in una query, FOR JSON PATH annida ogni colonna usando il relativo alias. La query seguente crea un oggetto JSON per ogni coppia (OrderHeader, OrderDetails) unita nella query.

Query

SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',  
        H.OrderDate AS 'Order.Date',  
        D.UnitPrice AS 'Product.Price',  
        D.OrderQty AS 'Product.Quantity'  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON PATH   

Result

[{
    "Order": {
        "Number": "SO43659",
        "Date": "2011-05-31T00:00:00"
    },
    "Product": {
        "Price": 2024.9940,
        "Quantity": 1
    }
}, {
    "Order": {
        "Number": "SO43659"
    },
    "Product": {
        "Price": 2024.9940
    }
}]

Altre informazioni su JSON nel motore di database SQL

Per un'introduzione visiva al supporto JSON predefinito, vedere i video seguenti: