适用于: SQL Server 2016(13.x)及更高版本
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics(仅限无服务器 SQL 池)
Microsoft Fabric
Warehouse 中的 SQL 分析终结点Microsoft Fabric
若要根据 SELECT
语句的结构自动设置 FOR JSON
子句的输出的格式,请指定 AUTO
选项。
指定 AUTO
选项时,将根据 SELECT 列表中的列的顺序及其源表自动确定 JSON 输出的格式。 无法更改此格式。
替代方法是使用 PATH
选项来保持对输出的控制。
- 有关
PATH
选项的详细信息,请参阅在 PATH 模式下格式化嵌套的 JSON 输出。 - 有关这两个选项的概述,请参阅 使用 FOR JSON将查询结果格式化为 JSON。
使用 FOR JSON AUTO
选项的查询必须具有 FROM
子句。
下面的一些示例展示了如何使用 AUTO
选项指定 FOR JSON
子句。 建议使用 Azure Data Studio 作为 JSON 查询的查询编辑器,因为它会自动格式化 JSON 结果(如本文所示),而不是显示平面字符串。
示例
示例 1
查询
当查询仅引用一个表时,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"
}]
示例 2
查询
联接表时,第一个表中的列会作为根对象的属性生成。 第二个表中的列会作为嵌套对象的属性生成。 第二个表的表名或别名(例如以下示例中的 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
}]
}]
示例 3
查询
你可以在 SELECT 语句中嵌套 FOR JSON PATH 子查询,而不使用 FOR JSON AUTO,如以下示例中所示。 此示例输出与上一示例相同的结果。
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
}]
}]
详细了解 SQL 数据库引擎中的 JSON
有关 SQL Server 和 Azure SQL 数据库中内置 JSON 支持的视频介绍,请观看以下视频: