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