适用于: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
自动设置输出格式。
- 有关该选项的详细信息
AUTO
,请参阅使用 AUTO 模式自动设置 JSON 输出格式 。 - 有关这两个选项的概述,请参阅 使用 FOR JSON将查询结果格式化为 JSON。
下面的一些示例展示了如何使用 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 支持的视觉简介,请参阅以下视频: