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


Форматирование вложенных выходных данных JSON с помощью режима PATH

Относится к: 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, укажите параметр PATH.

режим PATH позволяет создавать объекты-оболочки и вложенные сложные свойства. Результаты форматируются в виде массива объектов JSON.

Альтернативой является использование параметра AUTO для автоматического форматирования выходных данных на основе структуры инструкции SELECT.

В следующих примерах показано, как использовать предложение FOR JSON с опцией PATH. Форматируйте вложенные результаты с помощью имен столбцов с разделиемыми точками или с помощью вложенных запросов, как показано в примерах. По умолчанию значения NULL не включаются в FOR JSON выходные данные.

Замечание

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

Примеры

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

А. Имена столбцов, разделенных точками

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

Предложение FOR JSON PATH использует псевдоним столбца или имя столбца для определения имени ключа в выходных данных JSON. Если псевдоним содержит точки, параметр PATH создает вложенные объекты.

SELECT TOP 5 BusinessEntityID AS Id,
             FirstName,
             LastName,
             Title AS 'Info.Title',
             MiddleName AS 'Info.MiddleName'
FROM Person.Person
FOR JSON PATH;

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

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

В. Несколько таблиц

Если вы ссылаетесь на несколько таблиц в запросе, FOR JSON PATH группирует каждый столбец по его псевдониму. Следующий запрос создает один объект JSON для каждой (OrderHeader, OrderDetails) пары, к которым присоединяется запрос.

SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',
             H.OrderDate AS 'Order.Date',
             D.UnitPrice AS 'Product.Price',
             D.OrderQty AS 'Product.Quantity'
FROM Sales.SalesOrderHeader AS H
     INNER JOIN Sales.SalesOrderDetail AS D
         ON H.SalesOrderID = D.SalesOrderID
FOR JSON PATH;

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

[{
    "Order": {
        "Number": "SO43659",
        "Date": "2011-05-31T00:00:00"
    },
    "Product": {
        "Price": 2024.9940,
        "Quantity": 1
    }
}, {
    "Order": {
        "Number": "SO43659"
    },
    "Product": {
        "Price": 2024.9940
    }
}]

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

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