sql-server - 使用 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# 中编写自定义转换器来删除那些假元素?
解决方案
尝试以下操作:
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), '{}', '')
推荐阅读
- php - AWS SQS 仅接收来自两个不同调度的 1 条消息
- angular - 切片管道在角度下拉列表的 onChange 中抛出修剪过的字符串而不是原始字符串
- mysql - 使用重表优化 MYSQL 的建议
- python - 按组python从前一行中减去前一行
- php - php laravel 登录和注册通知报错
- java - Micronaut 安全 - 为 RSASignatureConfiguration 设置 PublicKey
- c - ReadFile 代码使用 Win32 API 从串口读取非常慢
- python - Ruby 中的 Bytes.fromhex 和 int_to_byte 实现
- python - 如何在 Pandas 数据框中选择由特定列中的 str 值确定的行范围,“每次出现此 str 值时,我都需要一个新切片”
- apache-spark - 使用 Spark 将数据帧存储到 HBase