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

标签 mysql json null coalesce

我正在从函数构建小的 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/

相关文章:

php - Controller 无法插入 yii 中的通知表

php - MySQL 错误 : mysql_fetch_array expects parameter 1 to be resource

java - 如何从 xls 文件生成 xml 或 json 映射,然后从该映射生成 html 表(结构)?

C++ allocator<X>::deallocate(NULL,1) 允许吗?

php - 如何在 yii find() 中输入条件?

php - 将 base64 编码的图像以 BLOB 形式保存到服务器端数据库

Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)

javascript - POST 请求返回 text/html 而不是 JSON,如何在 JS 中获取 JSON?

c# - 为什么编译器至少不警告 this == null

html - R 中的 readHTMLTable - 跳过 NULL 值