首页 > 解决方案 > MYSQL 中是否有类似 JSON_ARRAY_APPEND 的函数,但要附加多个值?

问题描述

我想在 JSON_ARRAY_APPEND 中添加多个值。

例如在以下查询中:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

我们的结果是:

{“人”:{“姓名”:“荷马”,“爱好”:[“吃”,“睡觉”,“基地跳跃”]}}

我希望能够在一行中添加多个爱好而不是十几个,使用类似的东西

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', '"Base Jumping","Skiing"') AS 'Result';

这导致

{“人”:{“姓名”:“荷马”,“爱好”:[“吃”,“睡觉”,“\”跳基\”,\“滑雪\”]}}

这几乎是我想要的,但有多余的字符是不想要的。有没有更好的方法来解决这个问题?

标签: mysql

解决方案


JSON_ARRAY_APPEND()允许您指定多个路径和值参数。您可以重复相同的路径,它将追加到前面追加的结果。

SELECT JSON_ARRAY_APPEND(@data, 
        '$.Person.Hobbies', "Base Jumping", 
        '$.Person.Hobbies', "Skiing") AS Result;

文档中提到了这一点:

路径值对从左到右进行评估。通过评估一对生成的文档成为评估下一对的新值。

您还可以使用JSON_MERGE_PRESERVE()连接数组:

SELECT JSON_MERGE_PRESERVE(@data, '$.Person.Hobbies', '["Base Jumping", "Skiing"]') AS Result;

推荐阅读