如何从MySQL中的JSON中删除空属性

时间:2018-06-20 05:11:18

标签: mysql

我有一个存储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)中的空属性。

2 个答案:

答案 0 :(得分:0)

以下查询将用于删除单个键值对,其中值是NULL

SELECT JSON_REMOVE(col, '$.countryCode')
FROM yourTable
WHERE CAST(col->"$.countryCode" AS CHAR(50)) = 'null';

但是,我看不到在一次更新中进行多次删除的干净方法。我们可以尝试将更新链接在一起,但这很丑陋且不可读。

此外,要检查您的JSON空值,我必须首先将值转换为文本。

Demo

答案 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"}