结合 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 块中的值):
- 具有值:
[{"key": "foo"}, {"key": "bar"}, {"key": "baz"}]
- 无值(NULL):
null
- 空字符串:
[{"key": ""}]
对于每个 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
我正在从函数构建小 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
而不是完整列表。它工作得很好,但我需要处理空字符串以及 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