Бөлісу құралы:


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

Относится к: SQL Server 2016 (13.x) и более поздних версиях; Azure SQL Database,Azure SQL Managed Instance,Azure Synapse Analytics (только для serverless SQL pool), SQL аналитический конечный пункт в Microsoft Fabric; Склад в Microsoft Fabric,SQL база данных в Microsoft Fabric

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

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

Используйте параметр, PATH если вы хотите управлять выходными данными.

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

Ниже приведены некоторые примеры предложения FOR JSON с параметром AUTO.

Замечание

Расширение MSSQL для Visual Studio Code может автоматически форматировать результаты JSON (как показано в этой статье), а не отображать неформатированную строку.

Examples

Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.

А. Форматирование JSON из одной таблицы

Если запрос ссылается только на одну таблицу, результаты предложения 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;

Вот результат.

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

В. Форматирование JSON для присоединенных таблиц

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

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

Вот результат.

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

С. Используйте FOR JSON PATH, чтобы сопоставить вывод в режиме AUTO

Вместо использования 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;

Вот результат.

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

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

Визуальное введение в встроенную поддержку JSON см. в формате JSON как мост между NoSQL и реляционными мирами.