Formattare automaticamente l'output JSON con la modalità AUTO (SQL Server)Format JSON Output Automatically with AUTO 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 formattare l'output della clausola FOR JSON automaticamente in base alla struttura dell'istruzione SELECT, specificare l'opzione AUTO.To format the output of the FOR JSON clause automatically based on the structure of the SELECT statement, specify the AUTO option.

Quando si specifica l'opzione AUTO il formato dell'output JSON viene determinato automaticamente in base all'ordine delle colonne nell'elenco SELECT e delle relative tabelle di origine.When you specify the AUTO option, the format of the JSON output is automatically determined based on the order of columns in the SELECT list and their source tables. Non è possibile modificare questo formato.You can't change this format.

L'alternativa consiste nell'usare l'opzione PATH per mantenere il controllo sull'output.The alternative is to use the PATH option to maintain control over the output.

Una query che usa l'opzione FOR JSON AUTO deve avere una clausola FROM .A query that uses the FOR JSON AUTO option must have a FROM clause.

Di seguito sono riportati alcuni esempi della clausola FOR JSON con l'opzione AUTO .Here are some examples of the FOR JSON clause with the AUTO option.

EsempiExamples

Esempio 1Example 1

QueryQuery

Quando una query fa riferimento a una sola tabella, i risultati della clausola FOR JSON AUTO sono simili a quelli di FOR JSON PATH.When a query references only one table, the results of the FOR JSON AUTO clause are similar to the results of FOR JSON PATH . In questo caso, FOR JSON AUTO non crea oggetti annidati.In this case, FOR JSON AUTO doesn't create nested objects. L'unica differenza è che FOR JSON AUTO genera come output alias separati da punti (come Info.MiddleName nell'esempio seguente) come chiavi con punti e non come oggetti annidati.The only difference is that FOR JSON AUTO outputs dot-separated aliases (for example, Info.MiddleName in the following example) as keys with dots, not as nested objects.

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

RisultatoResult

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "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.",
    "Info.MiddleName": "A"
}]

Esempio 2Example 2

QueryQuery

Quando si uniscono più tabelle, le colonne della prima tabella vengono generate come proprietà dell'oggetto radice.When you join tables, columns in the first table are generated as properties of the root object. Le colonne della seconda tabella vengono generate come proprietà di un oggetto annidato.Columns in the second table are generated as properties of a nested object. Il nome della tabella o l'alias della seconda tabella (ad esempio D nell'esempio seguente) viene usato come nome della matrice annidata.The table name or alias of the second table (for example, D in the following example) is used as the name of the nested array.

SELECT TOP 2 SalesOrderNumber,  
        OrderDate,  
        UnitPrice,  
        OrderQty  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON AUTO   

RisultatoResult

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

Esempio 3Example 3

QueryQuery
Invece di usare FOR JSON AUTO è possibile annidare una sottoquery FOR JSON PATH nell'istruzione SELECT, come illustrato nell'esempio seguente.Instead of using FOR JSON AUTO, you can nest a FOR JSON PATH subquery in the SELECT statement, as shown in the following example. Questo esempio genera lo stesso risultato dell'esempio precedente.This example outputs the same result as the preceding example.

SELECT TOP 2  
    SalesOrderNumber,  
    OrderDate,  
    (SELECT UnitPrice, OrderQty  
      FROM Sales.SalesOrderDetail AS D  
      WHERE H.SalesOrderID = D.SalesOrderID  
     FOR JSON PATH) AS D  
FROM Sales.SalesOrderHeader AS H  
FOR JSON PATH  

RisultatoResult

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

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)