JSON_INSERT

在JSON文件指定位置中新增JSON值。

命令格式

JSON json_insert(JSON <input>, ARRAY STRING <path>, JSON <value>, BOOLEAN <insert_after>);

参数说明

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

  • path:必填,待插入的JSON内容的位置。

  • value:必填,待插入的JSON内容。

  • insert_after:必填。

    • 若input参数中包含数组,且指定path的值已存在时,添加值的位置:

      • true:在指定位置后面插入新值。

      • false(默认值):在指定位置前面插入新值。

    • 说明

      若input参数中包含数组,数组中的JSON内容插入规则,假设input中数组的长度为n,指定插入的位置为m时:

      • 如果 m>=n,在数组末尾添加值value。

      • 如果 m<-n,在数组开头添加值value。

      • 如果 -n<=m<n,根据insert_after的值确定添加值value的位置。

    • 若input参数中未包含数组,默认将值插入至末尾。

返回值说明

修改后的JSON。

使用示例

  • 示例1:在指定位置插入新值。

    select json_insert(JSON'{"f1":1,"f2":{"t1":1,"t2":2}}', 
                       array("f2","t3"), 
                       JSON'3',
                       false
                      );

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":1,"f2":{"t1":1,"t2":2,"t3":3}} |
    +-----+
  • 示例2:在数组指定值前面插入数据。

    select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', false);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":[10,0,1,2]} |
    +-----+
  • 示例3:在数组指定值后面插入数据。

    select json_insert(JSON'{"f1":[0,1,2]}', array("f1","0"), JSON'10', true);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":[0,10,1,2]} |
    +-----+
  • 示例4:在数组中插入值,当插入的位置大于JSON内容数组的长度时,在数组末尾插入。

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

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":[0,1,2,4]} |
    +-----+
  • 示例5:在数组中插入值,当插入的位置小于JSON内容数组长度的负数时,在数组开头插入。

    select json_insert(JSON'{"f1":[0,1,2]}', array("f1","-4"), JSON'4', false);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":[4,0,1,2]} |
    +-----+
  • 示例6:在数组中插入值,当插入位置介于数组长度(不包含)与长度负数时,在指定位置插入。

    select json_insert(JSON'{"f1":[0,1,2]}', array("f1","1"), JSON'10', false);

    返回结果如下。

    +-----+
    | _c0 |
    +-----+
    | {"f1":[0,10,1,2]} |
    +-----+