Formatar saída JSON automaticamente com o Modo AUTO (SQL Server)Format JSON Output Automatically with AUTO Mode (SQL Server)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoSQL Data Warehouse do Azure nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Para formatar a saída da cláusula FOR JSON automaticamente com base na estrutura da instrução SELECT, especifique a opção AUTO.To format the output of the FOR JSON clause automatically based on the structure of the SELECT statement, specify the AUTO option.

Ao especificar a opção AUTO, o formato da saída JSON é determinado automaticamente com base na ordem das colunas na lista SELECT e suas tabelas de origem.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. Você não pode alterar esse formato.You can't change this format.

A alternativa é usar a opção PATH para manter o controle sobre a saída.The alternative is to use the PATH option to maintain control over the output.

Uma consulta que usa a opção FOR JSON AUTO deve ter uma cláusula FROM .A query that uses the FOR JSON AUTO option must have a FROM clause.

Aqui estão alguns exemplos da cláusula FOR JSON com a opção AUTO .Here are some examples of the FOR JSON clause with the AUTO option.

ExemplosExamples

Exemplo 1Example 1

ConsultaQuery

Quando uma consulta referencia somente uma tabela, os resultados da cláusula FOR JSON AUTO são semelhantes aos da 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 . Nesse caso, FOR JSON AUTO não criará objetos aninhados.In this case, FOR JSON AUTO doesn't create nested objects. A única diferença é que a FOR JSON AUTO gera aliases separadas por pontos (por exemplo, Info.MiddleName no exemplo a seguir) como chaves com pontos, não como objetos aninhados.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  

ResultadoResult

[{
    "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"
}]

Exemplo 2Example 2

ConsultaQuery

Quando você une tabelas, as colunas na primeira tabela são geradas como propriedades do objeto raiz.When you join tables, columns in the first table are generated as properties of the root object. As colunas na segunda tabela são geradas como propriedades de um objeto aninhado.Columns in the second table are generated as properties of a nested object. O nome da tabela ou o alias da segunda tabela (por exemplo, D no exemplo a seguir) é usado como o nome da matriz aninhada.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   

ResultadoResult

[{
    "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
    }]
}]

Exemplo 3Example 3

ConsultaQuery
Em vez de usar o FOR JSON AUTO, você pode aninhar uma subconsulta FOR JSON PATH na instrução SELECT, conforme mostrado no exemplo a seguir.Instead of using FOR JSON AUTO, you can nest a FOR JSON PATH subquery in the SELECT statement, as shown in the following example. Este exemplo produz o mesmo resultado do exemplo anterior.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  

ResultadoResult

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

Saiba mais sobre JSON no SQL Server e no Banco de Dados SQL do AzureLearn more about JSON in SQL Server and Azure SQL Database

Vídeos da MicrosoftMicrosoft videos

Para obter uma introdução visual ao suporte interno para JSON no SQL Server e no Banco de Dados SQL do Azure, consulte os seguintes vídeos:For a visual introduction to the built-in JSON support in SQL Server and Azure SQL Database, see the following videos:

Consulte TambémSee Also

Cláusula FOR (Transact-SQL)FOR Clause (Transact-SQL)