我有一个存储JSON值的表。在这些JSON中,JSON具有如下所示的null属性:
{
"name" : "AAAA",
"department" : "BBBB",
"countryCode" : null,
"languageCode" : null,
"region" : "AP"
}
我想编写一个查询,以便从输出中删除所有空属性。例如对于上述JSON,结果输出JSON应该像这样。
{
"name" : "AAAA",
"department" : "BBBB",
"region" : "AP"
}
我希望有一个通用查询,可以将其应用于任何JSON,以摆脱MySQL(v5.7)中的空属性。
答案 0 :(得分:0)
以下查询将用于删除单个键值对,其中值是NULL
:
SELECT JSON_REMOVE(col, '$.countryCode')
FROM yourTable
WHERE CAST(col->"$.countryCode" AS CHAR(50)) = 'null';
但是,我看不到在一次更新中进行多次删除的干净方法。我们可以尝试将更新链接在一起,但这很丑陋且不可读。
此外,要检查您的JSON空值,我必须首先将值转换为文本。
答案 1 :(得分:0)
如何使用JSON_REMOVE函数删除空键。如果条件为假,则使用$ .dummy。
select json_remove(abc,
case when json_unquote(abc->'$.name') = 'null' then '$.name' else '$.dummy' end,
case when json_unquote(abc->'$.department') = 'null' then '$.department' else '$.dummy' end,
case when json_unquote(abc->'$.countryCode') = 'null' then '$.countryCode' else '$.dummy' end,
case when json_unquote(abc->'$.languageCode') = 'null' then '$.languageCode' else '$.dummy' end,
case when json_unquote(abc->'$.region') = 'null' then '$.region' else '$.dummy' end)
from (
select cast('{
"name" : "AAAA",
"department" : "BBBB",
"countryCode" : null,
"languageCode" : null,
"region" : "AP"
}' as json) as abc ) a
输出:
{"name": "AAAA", "region": "AP", "department": "BBBB"}