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

combine CONCAT() and COALESCE() to generate JSON in MySQL

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

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

输出如下内容(这是一个要嵌入完整 JSON 块中的值):

对于每个 a.val 我想在我的列表中添加一个条目,但如果没有找到值,则使用字符串 null 而不是完整列表。它工作得很好,但我需要处理空字符串以及 NULL 值作为结果 JSON 中的 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