В MariaDB, JSON_ARRAY_INSERT()
е вградена функция, която вмъква стойност в JSON документ и връща резултата.
Синтаксис
Синтаксисът е така:
JSON_ARRAY_INSERT(json_doc, path, value[, path, value] ...)
Където json_doc
е JSON документът, path
е пътят до мястото, където искате да вмъкнете стойността/ите и value
е стойността за вмъкване.
Пример
Ето пример за демонстрация.
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3);
Резултат:
+------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', 3) |+-------------------------- ----------------+| [0, 3, 1, 2] |+------------------------------------------------ ----+
В този случай стойността 3
беше вмъкнат в масива на позиция 1
. Масивите са базирани на нула, така че става вторият елемент в масива.
Вмъкване на множество стойности
Можете да вмъкнете множество стойности в рамките на едно извикване към JSON_ARRAY_INSERT()
.
Пример:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5);
Резултат:
+------------------------------------------------------- --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[0]', 4, '$[2]', 5) |+------------------ ------------------------------------+| [4, 0, 5, 1, 2] |+---------------------------------------------- -----------------+
Оценката се извършва отляво надясно.
Ето какво се случва, ако превключим path
/value
аргументи около:
SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4);
Резултат:
+------------------------------------------------------- --------+| JSON_ARRAY_INSERT('[0, 1, 2]', '$[2]', 5, '$[0]', 4) |+------------------ ------------------------------------+| [4, 0, 1, 5, 2] |+---------------------------------------------- -----------------+
Множество масива
Можете да вмъквате стойности в повече от един масив в рамките на едно и също извикване на JSON_ARRAY_INSERT()
.
Пример:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5);
Резултат:
+------------------------------------------------------- ----------+| JSON_ARRAY_INSERT(@json_doc, '$.a[1]', 4, '$.b[2]', 5) |+--------------------- ----------------------------------+| {"a":[0, 4, 1], "b":[2, 3, 5]} |+----------------------- ---------------------------------+
Вложени масиви
Ето пример за вмъкване на стойност във вложен масив:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4);
Резултат:
+----------------------------------------------+| JSON_ARRAY_INSERT(@json_doc, '$[2][1]', 4) |+------------------------------ ------------+| [0, 1, [2, 4, 3]] |+--------------------------------------- ---------+
По-голям JSON документ
Ето пример с малко по-голям JSON документ.
Аз също използвам JSON_DETAILED()
за преобразяване на резултата:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_INSERT(
@json_doc,
'$.pet.diet[1]',
'Chicken')
);
Резултат:
{ "pet":{ "name":"Fluffy", "diet":[ "Риба", "Пиле", "Вода" ] }}
Нулеви аргументи
Ако първият аргумент е NULL
, резултатът е NULL
:
SELECT JSON_ARRAY_INSERT(null, '$[1]', 4);
Резултат:
+----------------------------------+| JSON_ARRAY_INSERT(null, '$[1]', 4) |+---------------------------------- -+| NULL |+------------------------------------+
Същото важи и за path
аргумент:
SELECT JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4);
Резултат:
+----------------------------------------------+| JSON_ARRAY_INSERT('[0, 1, 2, 3]', null, 4) |+------------------------------ --------------+| NULL |+-----------------------------------------------------+предварително>Ако обаче
value
аргументът еNULL
, след товаNULL
се вмъква в масива:SELECT JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null);
Резултат:
+------------------------------------------------------- +| JSON_ARRAY_INSERT('[0, 1, 2]', '$[1]', null) |+-------------------------- -------------------+| [0, нула, 1, 2] |+------------------------------------------------ -------+Можете също да използвате
JSON_ARRAY_APPEND()
за добавяне на стойности към масив.