W MariaDB, JSON_ARRAY_APPEND() to wbudowana funkcja, która dołącza wartości na końcu określonych tablic w dokumencie JSON i zwraca wynik.
Składnia
Składnia wygląda tak:
JSON_ARRAY_APPEND(json_doc, path, value[, path, value] ...)
Gdzie json_doc jest dokumentem JSON, path jest ścieżką do miejsca, w którym chcesz dołączyć wartości, a value to wartość do dodania.
Przykład
Oto przykład demonstrujący funkcję.
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4); Wynik:
+--------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4) | +--------------------------------------+ | [0, 1, 2, 3, 4] | +--------------------------------------+
W tym przypadku wartość 4 został dołączony na końcu tablicy.
Dołącz wiele wartości
Możesz dołączyć wiele wartości w jednym wywołaniu JSON_ARRAY_APPEND() .
Przykład:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5); Wynik:
+----------------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', 4, '$', 5) | +----------------------------------------------+ | [0, 1, 2, 3, 4, 5] | +----------------------------------------------+
Wiele tablic
Możesz dołączyć wartości do więcej niż jednej tablicy w ramach tego samego wywołania JSON_ARRAY_APPEND() .
Przykład:
SET @json_doc = '{"a": [0, 1], "b": [2, 3]}';
SELECT JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5); Wynik:
+--------------------------------------------------+
| JSON_ARRAY_APPEND(@json_doc, '$.a', 4, '$.b', 5) |
+--------------------------------------------------+
| {"a": [0, 1, 4], "b": [2, 3, 5]} |
+--------------------------------------------------+ Zagnieżdżone tablice
Oto przykład dołączenia wartości do tablicy zagnieżdżonej:
SET @json_doc = '[0, 1, [2, 3]]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[2]', 4); Wynik:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[2]', 4) | +-----------------------------------------+ | [0, 1, [2, 3, 4]] | +-----------------------------------------+
W poniższym przykładzie oryginalny dokument JSON nie zawiera tablicy zagnieżdżonej, ale JSON_ARRAY_APPEND() tworzy zagnieżdżoną tablicę na podstawie naszej ścieżki:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$[3]', 4); Wynik:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$[3]', 4) | +-----------------------------------------+ | [0, 1, 2, [3, 4]] | +-----------------------------------------+
Większy dokument JSON
Oto przykład z nieco większym dokumentem JSON.
Używam również JSON_DETAILED() aby upiększyć wynik:
SET @json_doc = '{
"pet": {
"name": "Fluffy",
"diet": ["Fish", "Chicken"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet',
'Water')
); Wynik:
{
"pet":
{
"name": "Fluffy",
"diet":
[
"Fish",
"Chicken",
"Water"
]
}
} A oto taki, który tworzy zagnieżdżoną tablicę:
SET @json_doc = '{
"pet": {
"name": "Scratch",
"diet": ["Beef", "Water"]
}
}';
SELECT JSON_DETAILED(
JSON_ARRAY_APPEND(
@json_doc,
'$.pet.diet[1]',
'Beer')
); Wynik:
{
"pet":
{
"name": "Scratch",
"diet":
[
"Beef",
[
"Water",
"Beer"
]
]
}
} Argumenty zerowe
Jeśli pierwszym argumentem jest NULL , wynik to NULL :
SELECT JSON_ARRAY_APPEND(null, '$', 4); Wynik:
+---------------------------------+ | JSON_ARRAY_APPEND(null, '$', 4) | +---------------------------------+ | NULL | +---------------------------------+
To samo dotyczy path argument:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, null, 4); Wynik:
+---------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, null, 4) | +---------------------------------------+ | NULL | +---------------------------------------+
Jeśli jednak value argument to NULL , a następnie NULL jest dołączany do tablicy:
SET @json_doc = '[0, 1, 2, 3]';
SELECT JSON_ARRAY_APPEND(@json_doc, '$', null); Wynik:
+-----------------------------------------+ | JSON_ARRAY_APPEND(@json_doc, '$', null) | +-----------------------------------------+ | [0, 1, 2, 3, null] | +-----------------------------------------+
Możesz także użyć JSON_ARRAY_INSERT() aby wstawić wartości do tablicy.