JSON_SET

替换JSON文件指定位置的值或新增对应的值。

命令格式

JSON json_set(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <create_if_missing>);

参数说明

  • input:必填,被替换的JSON内容。该参数支持的类型为:JSON ARRAY、JSON OBJECT。

  • path:必填,被替换的JSON内容的位置,类型为ARRAY<STRING>,ARRAY里的每一个值对应为JSON的一层嵌套定位路径值,如果JSON是n层嵌套内容,那么ARRAY数组对应为n个值。

  • value:必填,待替换的JSON值。

  • create_if_missing:必填,指定位置的值不存在时,是否将待替换的JSON内容添加到input中。取值为:

    • true:增加。

    • false(默认值):不增加。

返回值

修改后的JSON。

使用示例

  • 示例1:替换JSON指定位置的值。

    select json_set(JSON'[{"f1":1,"f2":null},2,null,3]',
                    array("0","f1"), 
                    JSON'[2,3,4]', 
                    false
                   );

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | [{"f1":[2,3,4],"f2":null},2,null,3] |
    +-----+
  • 示例2:替换JSON指定位置的值,值不存在就不替换。

    select json_set(JSON'[{"f1":1,"f2":null},2,null,3]', 
                    array("0","f3"), 
                    JSON'[2,3,4]', 
                    false);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | [{"f1":1,"f2":null},2,null,3] |
    +-----+
  • 示例3:替换JSON指定位置的值,值不存在就新增。

    select json_set(JSON'[{"f1":1,"f2":null},2,null,3]', 
                    array("0","f3"), 
                    JSON'[2,3,4]', 
                    true);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | [{"f1":1,"f2":null,"f3":[2,3,4]},2,null,3] |
    +-----+