In MariaDB JSON_EXISTS()
ist eine integrierte Funktion, mit der Sie überprüfen können, ob ein Wert an einem angegebenen Pfad im JSON-Dokument vorhanden ist.
Es akzeptiert das JSON-Dokument als Argument und gibt 1
zurück wenn der Pfad gefunden wird, und 0
wenn nicht.
Die MariaDB-Dokumentation besagt, dass die Funktion „feststellt, ob ein bestimmter JSON-Wert in den angegebenen Daten vorhanden ist“. Die Funktion scheint jedoch nicht wirklich nach einem bestimmten Wert zu suchen. Es ist wahrscheinlich genauer zu sagen, dass es bestimmt, ob ein bestimmter Pfad existiert, oder dass ein Wert im angegebenen Pfad existiert.
Zur Überprüfung, ob der tatsächliche Wert existiert, können Sie JSON_CONTAINS()
verwenden Funktion.
Syntax
Die Syntax lautet wie folgt:
JSON_EXISTS(json_doc, path)
Wobei json_doc
ist das JSON-Dokument und path
ist der zu findende Pfad.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Ergebnis:
+--------------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+------------------------------------ ----------------+| 1 |+----------------------------------------------------+In diesem Fall wird der Pfad gefunden und das Ergebnis ist
1
.Wenn der Pfad nicht gefunden wird, ist das Ergebnis
0
, etwa so:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Ergebnis:
+--------------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+------------------------------------ ----------------+| 0 |+---------------------------------------------------+Arrays
In diesem Beispiel überprüfe ich die Existenz eines Elements an einem bestimmten Index eines Arrays:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+Folgendes passiert, wenn der Index nicht im Array vorhanden ist:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 0 |+--------+Größeres JSON-Dokument
Hier ist ein Beispiel, das ein etwas größeres JSON-Dokument verwendet. Hier suche ich nach einem Schlüssel, der auf mehreren Verschachtelungsebenen existiert:
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;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+Null-Argumente
Wenn eines der Argumente
NULL
ist , ist das ErgebnisNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Ergebnis:
+---------------------+------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- --------------------------+| NULL | NULL |+---------------------+-------------------- -------------+Ungültiges JSON
Das Übergeben von ungültigem JSON führt zu
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Ergebnis:
+-----------------------------------+| JSON_EXISTS('{1}', '$.a') |+-----------------------------------+| NULL |+-----------------------------------+Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_EXISTS();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXISTS“Das Gleiche gilt, wenn Sie zu viele Argumente angeben:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_EXISTS“