跳到主要内容

JSON_SET

描述

JSON_SET 函数用于在 JSON 中插入或者替换数据并返回结果。

语法

JSON_SET (<json_object>, <path>,  <value>[, <path>,  <value>, ...])

参数

  • <json_object> JSON 类型表达式,被修改的目标。
  • <path> String 类型表达式,指定插入值的路径
  • <value> JSON 类型或其他 TO_JSON 支持的类型,要插入的值。

返回值

  • Nullable(JSON) 返回被修改后的 JSON 对象

使用说明

  1. <path> 指向的对象存在时,其行为和 JSON_REPLACE 一致,否则其行为和 JSON_INSERT 一致

示例

  1. 路径不存在
    select json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123);
    +--------------------------------------------------------+
    | json_set('{}', '$.k', json_parse('{}'), '$.k.k2', 123) |
    +--------------------------------------------------------+
    | {"k":{"k2":123}} |
    +--------------------------------------------------------+
  2. <path> 指向的值在 JSON 对象中已经存在
    select json_set('{"k": 1}', "$.k", 2);
    +--------------------------------+
    | json_set('{"k": 1}', "$.k", 2) |
    +--------------------------------+
    | {"k":2} |
    +--------------------------------+
  3. NULL 参数
    select json_set(NULL, '$[1]', 123);
    +-----------------------------+
    | json_set(NULL, '$[1]', 123) |
    +-----------------------------+
    | NULL |
    +-----------------------------+
    select json_set('{"k": "v"}', NULL, 123);
    +-----------------------------------+
    | json_set('{"k": "v"}', NULL, 123) |
    +-----------------------------------+
    | NULL |
    +-----------------------------------+
    select json_set('{"k": "v"}', '$.k[1]', NULL);
    +----------------------------------------+
    | json_set('{"k": "v"}', '$.k[1]', NULL) |
    +----------------------------------------+
    | {"k":["v",null]} |
    +----------------------------------------+