В 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() за добавяне на стойности към масив.