我正在从函数构建小JSON块,我需要过滤空值,同时引用像这样的非空值( MySQL 5.0 ,因此没有内置的JSON函数):< / p>
COALESCE(CONCAT('[',
group_concat(
CONCAT('{ "key": "', REPLACE(a.val, '"', '\\"'), '"}')
SEPARATOR ', ')
, ']'), 'null') AS jsonval
输出类似这样的东西(这是一个嵌入完整JSON块的值):
[{"key": "foo"}, {"key": "bar"}, {"key": "baz"}]
null
[{"key": ""}]
对于每个a.val
我想在我的列表中添加一个条目但是如果没有找到值,则使用字符串null
而不是完整列表。它工作得很好,但我需要在结果JSON中处理空字符串以及NULL
值为null。
REPLACE()
,CONCAT()
和COALESCE()
可以很好地协同处理空值,但是没有检测到空字符串,我如何以相同的方式处理NULL和空字符串?
我已经看到this question关于条带化空值,我正在寻找相反的情况。
答案 0 :(得分:6)
重复你的想法!
COALESCE(CONCAT('[',
group_concat(
CONCAT('{ "key": ',COALESCE(CONCAT('"', REPLACE(a.val, '"', '\\"'), '"'), 'null') ,'}')
SEPARATOR ', ')
, ']'), 'null') AS jsonval
编辑后:
COALESCE(CONCAT('[',
group_concat(
CONCAT('{ "key": ',
CASE WHEN a.val IS NULL THEN 'null'
WHEN a.val = '' THEN 'null'
ELSE CONCAT('"', REPLACE(a.val, '"', '\\"'), '"')
END
,'}')
SEPARATOR ', ')
, ']'), 'null') AS jsonval