Перейти к содержимому
Последнее обновление

JSON_REPLACE

Описание​

Функция JSON_REPLACE заменяет данные в JSON и возвращает результат.

Синтаксис​

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

Параметры​

  • <json_object>: выражение типа JSON, задающее объект для изменения.
  • <path>: выражение строкового типа, задающее путь к значению, которое нужно заменить.
  • <value>: значение типа JSON или другого типа, поддерживаемого функцией TO_JSON, которое будет использовано для замены.

Возвращаемое значение​

  • Nullable(JSON) Возвращает изменённый объект JSON.

Примечания по использованию​

  1. Обратите внимание, что пары «путь-значение» обрабатываются слева направо.
  2. Если значение, на которое указывает <path>, отсутствует в объекте JSON, соответствующая замена не выполняется.
  3. <path> не может содержать подстановочные символы. При их наличии возникает ошибка.
  4. Если <json_object> или <path> равен NULL, возвращается NULL. Если <value> равен NULL, вставляется значение JSON null.

Примеры​

  1. Пары «путь-значение» обрабатываются слева направо
    select json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123);
    +-------------------------------------------------------------------------------------------------+
    | json_replace('{"k": {"k2": "v2"}}', '$.k', json_parse('{"k2": 321, "k3": 456}'), '$.k.k2', 123) |
    +-------------------------------------------------------------------------------------------------+
    | {"k":{"k2":123,"k3":456}} |
    +-------------------------------------------------------------------------------------------------+
  2. Значение, на которое указывает <path>, отсутствует в объекте JSON
    select json_replace('{"k": 1}', "$.k2", 2);
    +-------------------------------------+
    | json_replace('{"k": 1}', "$.k2", 2) |
    +-------------------------------------+
    | {"k":1} |
    +-------------------------------------+
  3. <path> не может содержать подстановочные символы
    select json_replace('{"k": 1}', "$.*", 2);
    ERROR 1105 (HY000): errCode = 2, detailMessage = [INVALID_ARGUMENT] In this situation, path expressions may not contain the * and ** tokens or an array range, argument index: 1, row index: 0
  4. Параметры со значением NULL
    select json_replace(NULL, '$[1]', 123);
    +---------------------------------+
    | json_replace(NULL, '$[1]', 123) |
    +---------------------------------+
    | NULL |
    +---------------------------------+
    select json_replace('{"k": "v"}', NULL, 123);
    +---------------------------------------+
    | json_replace('{"k": "v"}', NULL, 123) |
    +---------------------------------------+
    | NULL |
    +---------------------------------------+
    select json_replace('{"k": "v"}', '$.k', NULL);
    +-----------------------------------------+
    | json_replace('{"k": "v"}', '$.k', NULL) |
    +-----------------------------------------+
    | {"k":null} |
    +-----------------------------------------+