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

适用范围:SQL Server 2016 (13.x) 及更高版本 Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics(仅限无服务器 SQL 池)

若要删除默认括住 FOR JSON 子句的 JSON 输出的方括号,请指定 WITHOUT_ARRAY_WRAPPER 选项。 将此选项用于单行结果,生成单个 JSON 对象作为输出,而不是生成具有单个元素的数组。

如果将此选项用于多行结果,生成的输出将不会是有效的 JSON,因为存在多个元素并且缺少方括号。

示例(单行结果)

以下示例介绍了在指定和未指定 WITHOUT_ARRAY_WRAPPER 选项的情况下 FOR JSON 子句的输出。

查询

SELECT 2015 as year, 12 as month, 15 as day  
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER 

指定结果 with the 结果

{
    "year": 2015,
    "month": 12,
    "day": 15
} 

未指定 WITHOUT_ARRAY_WRAPPER 选项的结果(默认)

[{
    "year": 2015,
    "month": 12,
    "day": 15
}]

示例(多行结果)

下面又通过一个示例介绍了在指定 FOR JSON 选项的情况下 WITHOUT_ARRAY_WRAPPER 选项。 本示例生成多行结果。 输出不是有效的 JSON,因为存在多个元素并且缺少方括号。

查询

SELECT TOP 3 SalesOrderNumber, OrderDate, Status  
FROM Sales.SalesOrderHeader  
ORDER BY ModifiedDate  
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER 

指定结果 with the 结果

{
    "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 Server 和 Azure SQL 数据库中的 JSON

Microsoft 视频

注意

此部分中的某些视频链接在此时可能不起作用。 Microsoft 会将以前在第 9 频道上的内容迁移到新平台。 随着视频迁移到新平台,我们将更新链接。

有关 SQL Server 和 Azure SQL 数据库中内置 JSON 支持的视频介绍,请观看以下视频:

另请参阅

FOR 子句 (Transact-SQL)