我正在从函数构建小的 JSON block ,我需要像这样在引用非空值时过滤空值(MySQL 5.0,因此没有内置的 JSON 函数):
COALESCE(CONCAT('[',
group_concat(
CONCAT('{ "key": "', REPLACE(a.val, '"', '\\"'), '"}')
SEPARATOR ', ')
, ']'), 'null') AS jsonval
它输出如下内容(这是一个要嵌入到完整 JSON block 中的值):
- 值:
[{"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 - 结合 CONCAT() 和 COALESCE() 在 MySQL 中生成 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36691701/