结合CONCAT()和COALESCE()在MySQL中生成JSON

我正在从函数构建小JSON块,我需要过滤空值,同时引用像这样的非空值(MySQL 5.0,所以没有内置的JSON函数):

COALESCE(CONCAT('[', 
    group_concat(
        CONCAT('{ "key": "', REPLACE(a.val, '"', '\\"'), '"}') 
        SEPARATOR ', ')
, ']'), 'null') AS jsonval

输出类似这样的东西(这是一个嵌入完整JSON块的值):

>带值:[{“key”:“foo”},{“key”:“bar”},{“key”:“baz”}]
>没有值(NULL):null
>带空字符串:[{“key”:“”}]

对于每个a.val,我想在我的列表中添加一个条目,但是如果没有找到值,则将字符串设置为null而不是完整列表.它工作得很好,但我需要在结果JSON中处理空字符串以及NULL值为null.

REPLACE(),CONCAT()和COALESCE()在空值上很好地协同工作,但是没有检测到空字符串,我怎样才能以相同的方式处理NULL和空字符串?

我已经看到有关条带空值的this question,我正在寻找相反的结果.

解决方法:

只是迭代你的想法!

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
上一篇:桶排序


下一篇:MySQL,多行来分隔字段