W MariaDB, JSON_REMOVE() to wbudowana funkcja, która usuwa dane z dokumentu JSON i zwraca wynik.
Składnia
Składnia wygląda tak:
JSON_REMOVE(json_doc, path[, path] ...) Przykład
Oto przykład do zademonstrowania.
SET @json = '{ "name" : "Wag", "type" : "Dog" }';
SELECT JSON_REMOVE(@json, '$.type'); Wynik:
+------------------------------+
| JSON_REMOVE(@json, '$.type') |
+------------------------------+
| {"name": "Wag"} |
+------------------------------+
W tym przypadku usunęliśmy element danych type z dokumentu. Innymi słowy, type klucz i jego wartość zostały usunięte.
Tablice
JSON_REMOVE() może być użyty do usunięcia całej tablicy lub określonych elementów w tablicy.
Aby usunąć całą tablicę, po prostu użyj nazwy klucza:
SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
SELECT JSON_REMOVE(@json, '$.scores'); Wynik:
+--------------------------------+
| JSON_REMOVE(@json, '$.scores') |
+--------------------------------+
| {"name": "Wag"} |
+--------------------------------+ To usunęło całą tablicę z dokumentu.
Aby usunąć element tablicy, określ indeks elementu. Oto przykład usuwania elementu tablicy z tablicy:
SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
SELECT JSON_REMOVE(@json, '$.scores[1]'); Wynik:
+-----------------------------------+
| JSON_REMOVE(@json, '$.scores[1]') |
+-----------------------------------+
| {"name": "Wag", "scores": [8, 9]} |
+-----------------------------------+
W tym przypadku drugi element tablicy został usunięty. Tablice są oparte na zerach, więc $.scores[1] odnosi się do drugiego elementu w tablicy.
Zobacz poniżej, jak JSON_REMOVE() zajmuje się usuwaniem wielu ścieżek w tablicy.
Wiele ścieżek
Gdy podajesz wiele ścieżek, są one oceniane od lewej do prawej. Oznacza to, że wynik z wcześniejszej oceny jest używany jako wartość dla następnej.
Warto zwrócić na to szczególną uwagę podczas usuwania elementów z tablicy na podstawie ich indeksu.
Po pierwsze, oto przykład, który usuwa wiele ścieżek z dokumentu na podstawie ich klucza:
SET @json = '
{
"name" : "Wag",
"type" : "Dog",
"weight" : 10
}
';
SELECT JSON_REMOVE(@json, '$.type', '$.weight'); Wynik:
+------------------------------------------+
| JSON_REMOVE(@json, '$.type', '$.weight') |
+------------------------------------------+
| {"name": "Wag"} |
+------------------------------------------+ Każda para klucz/wartość została usunięta zgodnie z oczekiwaniami.
W następnym przykładzie nie usuwamy pary klucz/wartość. Zamiast tego usuwamy wiele elementów z tablicy:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REMOVE(@json, '$.scores[2]', '$.scores[4]') AS a,
JSON_REMOVE(@json, '$.scores[4]', '$.scores[2]') AS b; Wynik:
+--------------------------+--------------------------+
| a | b |
+--------------------------+--------------------------+
| {"scores": [0, 1, 3, 4]} | {"scores": [0, 1, 3, 5]} |
+--------------------------+--------------------------+
W tym przypadku wywołaliśmy JSON_REMOVE() dwa razy. Oba określają ten sam indeks tablicy do usunięcia (2 i 4 ), ale zamieniamy argumenty w drugim wywołaniu. W pierwszym przykładzie jest to 2 następnie 4 (w tej kolejności). W drugim przykładzie jest to 4 następnie 2 .
Dało to inny wynik dla każdego połączenia. Jak wspomniano, wiele ścieżek jest ocenianych od lewej do prawej, więc kolejność może wpływać na wynik.
Oto kolejny przykład ilustrujący, w jaki sposób wynik może być zupełnie inny, w zależności od tego, ile ścieżek jest określonych, które z nich i w jakiej kolejności:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f; Wynik (przy użyciu wyjścia pionowego):
a: {"scores": [1, 3, 4, 5]}
b: {"scores": [2, 3, 4, 5]}
c: {"scores": [1, 3, 4]}
d: {"scores": [2, 3, 4]}
e: {"scores": [2, 3, 4, 5]}
f: {"scores": [1, 3, 4, 5]} Argumenty zerowe
Jeśli jakikolwiek argument ma wartość NULL , wynik to NULL :
SELECT
JSON_REMOVE(null, '$.a') AS a,
JSON_REMOVE('{"a":1}', null) AS b,
JSON_REMOVE(null, null) AS c; Wynik:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Nieprawidłowa liczba parametrów
Wywołanie JSON_REMOVE() bez argumentu powoduje błąd:
SELECT JSON_REMOVE(); Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'
Tak samo jest, gdy nie przekazano wystarczającej liczby argumentów:
SELECT JSON_REMOVE('{"a":1}'); Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'