【发布时间】:2016-08-10 01:21:23
【问题描述】:
我正在从函数构建小的 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 关于删除空值,我正在寻找相反的情况。
【问题讨论】:
-
为什么要从 SQL 代码中生成 JSON?一般来说,您不应该这样做(因为这是应用程序/数据传输问题,而不是数据库操作)。
-
我也不应该使用 MySQL 5.0... 业务需求!此 JSON 不应传输,但用于报告/维护目的,我们无法添加用于导出的外部工具。