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

JSON_SET

Описание​

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

Синтаксис​

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

Параметры​

  • <json_object>: выражение типа JSON, задающее объект для изменения.
  • <path>: выражение строкового типа, задающее путь для вставки значения
  • <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]} |
    +----------------------------------------+