在 PATH 模式下设置嵌套 JSON 输出的格式

适用于:SQL Server 2016 (13.x)及更高版本Azure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics(仅限无服务器 SQL 池)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 预览版中的 SQL 数据库

若要保持对子句 FOR JSON 输出的完全控制,请指定选项 PATH

借助 PATH 模式,你可以创建包装器对象,并嵌套复杂属性。 结果会格式化为 JSON 对象数组。

替代方法是使用选项 AUTO 根据语句的结构 SELECT 自动设置输出格式。

下面的一些示例展示了如何使用 FOR JSON 选项指定 PATH 子句。 使用以点分隔的列名称或使用嵌套查询来设置嵌套结果的格式,如下面的示例所示。 默认情况下,输出中不包含 FOR JSON null 值。 Azure Data Studio 是建议用于 JSON 查询的查询编辑器,因为它会自动设置 JSON 结果的格式(如本文中所示),而不是显示平展字符串。

示例 - 以点分隔的列名称

以下查询将 AdventureWorks Person 表的前五行格式设置为 JSON。

FOR JSON PATH 子句使用列别名或列名来确定 JSON 输出中的键名称。 如果别名包含点,则 PATH 选项将创建嵌套对象。

Query

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

Result

[{
    "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 会使用其别名嵌套每一列。 以下查询为查询中的每对(OrderHeader, OrderDetails)创建一个 JSON 对象。

Query

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 H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON PATH   

Result

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

详细了解 SQL 数据库引擎中的 JSON

有关内置 JSON 支持的视觉简介,请参阅以下视频: