Поделиться через


Автоматическое форматирование выходных данных JSON в режиме AUTO

Применимо к: SQL Server 2016 (13.x) и более поздним версиямAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (только бессерверный пул SQL)SQL аналитическая точка в Microsoft FabricWarehouse в Microsoft Fabricбаза данных SQL в Предварительном просмотре Microsoft Fabric

Чтобы отформатировать выходные данные FOR JSON предложения автоматически на основе структуры SELECT инструкции, укажите параметр AUTO.

При указании AUTO параметра формат выходных данных JSON автоматически определяется в зависимости от порядка столбцов в списке SELECT и их исходных таблиц. Этот формат изменить нельзя.

Альтернативой является использование PATH параметра для поддержания контроля над выходными данными.

Запрос, использующий FOR JSON AUTO параметр, должен иметь FROM предложение.

Ниже приведены некоторые примеры предложения FOR JSON с параметром AUTO. Azure Data Studio является рекомендуемым редактором запросов JSON, так как он позволяет выполнять автоматическое форматирование результатов JSON (как показано в этой статье) вместо отображения плоской строки.

Examples

Example 1

Query

Если запрос ссылается только на одну таблицу, результаты предложения FOR JSON AUTO похожи на результаты FOR JSON PATH. В этом случае FOR JSON AUTO не создает вложенные объекты. Единственное различие заключается в том, что FOR JSON AUTO выходные псевдонимы с разделиющими точками (например, Info.MiddleName в следующем примере) отображаются как ключи с точками, а не как вложенные объекты.

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

Result

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

Example 2

Query

При соединении таблиц столбцы в первой таблице создаются как свойства корневого объекта. Столбцы во второй таблице создаются как свойства вложенного объекта. В качестве имени вложенного массива используется имя таблицы или псевдоним второй таблицы (например, D в следующем примере).

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

Result

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

Example 3

Query
Вместо использования FOR JSON AUTO можно включить подзапрос FOR JSON PATH в оператор SELECT, как показано в следующем примере. В этом примере выводится тот же результат, что и в предыдущем.

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  

Result

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

Дополнительные сведения о JSON в ядре СУБД SQL

Дополнительные сведения о встроенной поддержке JSON см. в следующих видео: