适用于:SQL Server 2016 (13.x)及更高版本
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics(仅限无服务器 SQL 池)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 预览版中的 SQL 数据库
要删除默认情况下由 FOR JSON
子句生成的 JSON 输出周围的方括号,请指定 WITHOUT_ARRAY_WRAPPER
选项。 使用此选项和单行结果来生成单个 JSON 对象作为输出,而不是具有单个元素的数组。
如果将此选项与多行结果一起使用,则由于存在多个元素且缺少方括号,因此生成的输出不是有效的 JSON。
示例(单行结果)
以下示例显示了带有和没有 FOR JSON
选项的 WITHOUT_ARRAY_WRAPPER
子句的输出。
Query
SELECT 2015 as year, 12 as month, 15 as day
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
结果带有WITHOUT_ARRAY_WRAPPER
选项
{
"year": 2015,
"month": 12,
"day": 15
}
结果(默认值)不带 WITHOUT_ARRAY_WRAPPER
选项
[{
"year": 2015,
"month": 12,
"day": 15
}]
示例(多行结果)
下面是一个包含FOR JSON
选项和不包含WITHOUT_ARRAY_WRAPPER
选项的子句示例。 本示例将生成多行结果。 输出不是有效的 JSON,因为存在多个元素并且缺少方括号。
Query
SELECT TOP 3 SalesOrderNumber, OrderDate, Status
FROM Sales.SalesOrderHeader
ORDER BY ModifiedDate
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER
结果,带有WITHOUT_ARRAY_WRAPPER
选项
{
"SalesOrderNumber": "SO43662",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}, {
"SalesOrderNumber": "SO43661",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}, {
"SalesOrderNumber": "SO43660",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}
结果(默认) 没有 WITHOUT_ARRAY_WRAPPER
选项
[{
"SalesOrderNumber": "SO43662",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}, {
"SalesOrderNumber": "SO43661",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}, {
"SalesOrderNumber": "SO43660",
"OrderDate": "2011-05-31T00:00:00",
"Status": 5
}]
详细了解 SQL 数据库引擎中的 JSON
有关内置 JSON 支持的视觉简介,请参阅以下视频: