从 SQL Server 中的 JSON 中删除空元素

Has*_*eeb 3 sql json

想要准备没有空列的 json。

这是详细示例

我的表

=================
id ,   Name
=================
1  ,    Ali
2  ,    
3  ,    jhon
=================
Run Code Online (Sandbox Code Playgroud)

JSON 的 SQL 语句

(SELECT [Id],[Name] FROM My_Table)
FOR JSON PATH
Run Code Online (Sandbox Code Playgroud)

SQL 结果:

[{
    "Id": 1,
    "Name": "Ali"
}, {
    "Id": 2,
    "Name": ""
}, {
    "Id": 3,
    "Name": "Jhon"
}]
Run Code Online (Sandbox Code Playgroud)

但我想排除没有值的元素,例如以下结果中的 No "Name":"" Element:

[{
    "Id": 1,
    "Name": "Ali"
}, {
    "Id": 2,
}, {
    "Id": 3,
    "Name": "Jhon"
}]
Run Code Online (Sandbox Code Playgroud)

编辑: 请注意,我可以应用 CASE 或 UDF 将空值转换为 null,并且 null 值可能会从 json 中删除,但它会降低大量记录的整体性能,因此寻找明智的解决方案。

mbh*_*n88 5

JSON Auto如果未明确指定,则默认忽略空字段INCLUDE_NULL_VALUES。检查更多信息。

要在 FOR JSON 子句的 JSON 输出中包含空值,请指定 INCLUDE_NULL_VALUES 选项。

如果不指定 INCLUDE_NULL_VALUES 选项,则 JSON 输出不包含查询结果中为 null 的值的属性。

另外,Sql Fiddle

忽略空值

(SELECT [Id], (CASE WHEN Name = '' THEN NULL ELSE Name END) as Name FROM test)
FOR JSON Auto  
Run Code Online (Sandbox Code Playgroud)

包括空值

(SELECT [Id],(CASE WHEN Name = '' THEN NULL ELSE Name END) as Name FROM test)
FOR JSON Auto, INCLUDE_NULL_VALUES
Run Code Online (Sandbox Code Playgroud)