W MariaDB, JSON_EXISTS()
to wbudowana funkcja, która pozwala sprawdzić, czy wartość istnieje w określonej ścieżce w dokumencie JSON.
Akceptuje dokument JSON jako argument i zwraca 1
jeśli ścieżka zostanie znaleziona, a 0
jeśli nie.
Dokumentacja MariaDB stwierdza, że funkcja „określa, czy w danych danych istnieje określona wartość JSON”. Jednak funkcja nie wydaje się sprawdzać podanej wartości. Prawdopodobnie bardziej trafne jest stwierdzenie, że określa, czy określona ścieżka istnieje lub że pod określoną ścieżką istnieje wartość.
Do sprawdzania, czy rzeczywista wartość istnieje, możesz użyć JSON_CONTAINS()
funkcja.
Składnia
Składnia wygląda tak:
JSON_EXISTS(json_doc, path)
Gdzie json_doc
jest dokumentem JSON i path
to droga do znalezienia.
Przykład
Oto przykład do zademonstrowania.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Wynik:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.name') | +--------------------------------------------+ | 1 | +--------------------------------------------+
W tym przypadku ścieżka zostanie znaleziona, a wynikiem jest 1
.
Jeśli ścieżka nie zostanie znaleziona, wynik to 0
, tak:
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Wynik:
+--------------------------------------------+ | JSON_EXISTS('{ "name": "Wag" }', '$.type') | +--------------------------------------------+ | 0 | +--------------------------------------------+
Tablice
W tym przykładzie sprawdzam istnienie elementu pod danym indeksem tablicy:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
"$.scores[2]"
) AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Oto, co się stanie, jeśli indeks nie istnieje w tablicy:
SELECT JSON_EXISTS(
'{
"name": "Wag",
"scores": [ 10, 8, 7 ]
}',
'$.scores[3]'
) AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Większy dokument JSON
Oto przykład, który używa nieco większego dokumentu JSON. Tutaj sprawdzam klucz, który istnieje na kilku poziomach zagnieżdżenia:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXISTS(
@json_document,
'$.details.awards.Sumo 2020'
) AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Argumenty zerowe
Jeśli którykolwiek z argumentów jest NULL
, wynik to NULL
:
SELECT
JSON_EXISTS(null, '$.a'),
JSON_EXISTS('{ "a": 1 }', null);
Wynik:
+--------------------------+---------------------------------+ | JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a": 1 }', null) | +--------------------------+---------------------------------+ | NULL | NULL | +--------------------------+---------------------------------+
Nieprawidłowy JSON
Przekazywanie nieprawidłowych wyników JSON w NULL
:
SELECT JSON_EXISTS('{1}', '$.a');
Wynik:
+---------------------------+ | JSON_EXISTS('{1}', '$.a') | +---------------------------+ | NULL | +---------------------------+
Nieprawidłowa liczba parametrów
Brak argumentów skutkuje błędem:
SELECT JSON_EXISTS();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'
Tak samo jest, gdy podajesz zbyt wiele argumentów:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXISTS'