首页 > 解决方案 > 从 SQL Server 中的 JSON 中删除空元素

问题描述

想要准备没有空列的 json。

这是详细示例

MY_TABLE

=================
id ,   Name
=================
1  ,    Ali
2  ,    
3  ,    jhon
=================

JSON 的 SQL 语句

(SELECT [Id],[Name] FROM My_Table)
FOR JSON PATH

SQL 结果:

[{
    "Id": 1,
    "Name": "Ali"
}, {
    "Id": 2,
    "Name": ""
}, {
    "Id": 3,
    "Name": "Jhon"
}]

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

[{
    "Id": 1,
    "Name": "Ali"
}, {
    "Id": 2,
}, {
    "Id": 3,
    "Name": "Jhon"
}]

已编辑: 请注意,我可以应用 CASE 或 UDF 将空值转换为空值,空值可能会从 json 中删除,但它会降低大量记录的整体性能,因此看起来很聪明。

标签: sqljson

解决方案


JSON AutoINCLUDE_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  

包括空值

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

推荐阅读