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

QUESTO ARGOMENTO SI APPLICA A: sìSQL Server (a partire dalla versione 2016)sìDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure 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 in 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 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 tramite l'alias corrispondente.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
    }
}]

Acquisire familiarità con il supporto JSON integrato in SQL ServerLearn more about the built-in JSON support in SQL Server

Per un numero elevato di soluzioni specifiche, casi di utilizzo e indicazioni, vedere il post di blog sul supporto JSON predefinito in SQL Server e Database SQL di Azure per Microsoft Program Manager Jovan Popovic.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)