Formattare l'output JSON annidato con la modalità PATH (SQL Server)Format Nested JSON Output with PATH Mode (SQL Server)

In questo argomento si applica a: SìSQL ServerSìDatabase SQL di AzurenonAzure SQL Data Warehouse non Parallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Per mantenere il controllo completo sull'output della clausola FOR JSON, specificare l'opzione PATH.To maintain full control over the output of the FOR JSON clause, specify the PATH option.

La modalitàPATH consente di creare oggetti wrapper e annidare proprietà complesse.PATH mode lets you create wrapper objects and nest complex properties. I risultati vengono formattati sotto forma di matrice di oggetti JSON.The results are formatted as an array of JSON objects.

L'alternativa prevede l'uso dell'opzione AUTO per formattare l'output automaticamente in base alla struttura dell'istruzione SELECT.The alternative is to use the AUTO option to format the output automatically based on the structure of the SELECT statement.

Di seguito sono riportati alcuni esempi della clausola FOR JSON con l'opzione PATH .Here are some examples of the FOR JSON clause with the PATH option. Per formattare risultati annidati, usare nomi di colonna separati da punti oppure query annidate, come illustrato negli esempi seguenti.Format nested results by using dot-separated column names or by using nested queries, as shown in the following examples. Per impostazione predefinita, i valori null non vengono inclusi nell'output FOR JSON.By default, null values are not included in FOR JSON output.

Esempio: nomi di colonna separati da puntiExample - Dot-separated column names

La query seguente formatta le prime cinque righe della tabella Person di AdventureWorks come JSON.The following query formats the first five rows from the AdventureWorks Person table as JSON.

La clausola FOR JSON PATH usa l'alias o il nome di colonna per determinare il nome della chiave nell'output JSON.The FOR JSON PATH clause uses the column alias or column name to determine the key name in the JSON output. Se un alias contiene punti, l'opzione PATH crea oggetti annidati.If an alias contains dots, the PATH option creates nested objects.

QueryQuery

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

RisultatoResult

[{
    "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ù tabelleExample - Multiple tables

Se nella query si fa riferimento a più tabelle, FOR JSON PATH annida ogni colonna usando il relativo alias.If you reference more than one table in a query, FOR JSON PATH nests each column using its alias. La query seguente crea un oggetto JSON per ogni coppia (OrderHeader,OrderDetails) unita in join nella query.The following query creates one JSON object per (OrderHeader, OrderDetails) pair joined in the query.

QueryQuery

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

RisultatoResult

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

Altre informazioni sul supporto JSON integrato in SQL ServerLearn more about the built-in JSON support in SQL Server

Per soluzioni specifiche, casi d'uso e indicazioni, vedere i post del blog sul supporto JSON integrato in SQL Server e nel database SQL di Azure redatti da Jovan Popovic, Microsoft Program Manager.For lots of specific solutions, use cases, and recommendations, see the blog posts about the built-in JSON support in SQL Server and in Azure SQL Database by Microsoft Program Manager Jovan Popovic.

Vedere ancheSee Also

Clausola FOR (Transact-SQL)FOR Clause (Transact-SQL)