从 JSON 中删除方括号 - WITHOUT_ARRAY_WRAPPER 选项

适用于: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 支持的视觉简介,请参阅以下视频: