首页 > 解决方案 > 使用 FOR JSON AUTO 语法时删除空 json 对象

问题描述

抱歉,如果标题有点令人困惑,但会尝试为我的问题举一个真实的例子。

所以我正在尝试使用新的支持查询语法的 Sql Server JSON。

我在两个表之间进行左连接,当然如果第二个表不包含任何元素,我会得到第二个表的空值。

select a.Id, b.RefId, b.Name
from table1 a
left join table2 b
on a.Id = b.RefId

查询很简单,只是为了说明我在做什么。如果我FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER在查询末尾添加部分,我会得到一个不错的 json 字符串,但是,如果没有table2与任何元素匹配的元素,table1那么我会得到一个带有空对象的数组。如下所示:

{
  "Id": 1,
  "b":[{}]
}

这很好,但我想从b元素中完全删除空对象,所以,我可以有这样的东西:

{
  "Id": 1,
  "b":[]
}

这是否可以在 Sql Server 中完成,而不是在 c# 中编写自定义转换器来删除那些假元素?

标签: sql-serversql-server-2017

解决方案


尝试以下操作:

select replace((select a.Id, b.RefId, b.Name
from table1 a
left join table2 b
on a.Id = b.RefId
for json auto, without_array_wrapper), '{}', '')

推荐阅读