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