In MariaDB, JSON_CONTAINS() ist eine integrierte Funktion, mit der Sie herausfinden können, ob ein bestimmter Wert im angegebenen JSON-Dokument oder an einem bestimmten Pfad innerhalb des Dokuments gefunden wird.
Es gibt 1 zurück wenn es den Wert enthält, 0 wenn nicht, und NULL wenn eines der Argumente NULL ist .
Syntax
Die Syntax lautet wie folgt:
JSON_CONTAINS(json_doc, val[, path])
Wobei json_doc ist das JSON-Dokument, val ist der zu findende Wert und path ein optionaler Wert, der einen Pfad innerhalb des Dokuments angibt.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Wag"}'); Ergebnis:
In diesem Fall gab es eine Übereinstimmung und das Ergebnis ist 1 .
Im nächsten Beispiel gibt es keine Übereinstimmung:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Woof"}'); Ergebnis:
Beachten Sie, dass der Wert in geschweiften Klammern eingeschlossen ist.
Folgendes passiert, wenn das zweite Argument nicht gültig ist:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag'); Ergebnis:
Sehen wir uns die Warnung an:
SHOW WARNINGS; Ergebnis:
+---------+------+------------------------------------- -------------------------------------------------- ----+| Ebene | Code | Nachricht |+---------+------+------------------------------ -------------------------------------------------- ---+| Warnung | 4038 | Syntaxfehler im JSON-Text in Argument 2 zur Funktion „json_contains“ an Position 1 |+---------+------+--------------- -------------------------------------------------- ------------------+
Geben Sie einen Pfad an
Sie können optional ein drittes Argument verwenden, um einen Pfad anzugeben.
Beispiel:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 10, '$.weight'); Ergebnis:
Bei der Pfadangabe musste ich keine geschweiften Klammern verwenden.
Hier ist einer, der nach einer Zeichenfolge sucht:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '"Wag"', '$.name'); Ergebnis:
Beachten Sie, dass ich innerhalb der einfachen Anführungszeichen doppelte Anführungszeichen verwendet habe. Wenn ich die doppelten Anführungszeichen weglasse, passiert Folgendes:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag', '$.name'); Ergebnis:
Und sehen wir uns die Warnung an:
SHOW WARNINGS; Ergebnis:
+---------+------+------------------------------------- -------------------------------------------------- ----+| Ebene | Code | Nachricht |+---------+------+------------------------------ -------------------------------------------------- ---+| Warnung | 4038 | Syntaxfehler im JSON-Text in Argument 2 zur Funktion „json_contains“ an Position 1 |+---------+------+--------------- -------------------------------------------------- ------------------+
Verschachtelte Strukturen
Hier ist ein Beispiel, das nach einem Wert in einem verschachtelten Dokument sucht:
SET @json_document = '{ "name": "Wag", "specs": { "weight": 10, "height": 30 } }';
SELECT JSON_CONTAINS(@json_document, 30, '$.specs.height'); Ergebnis:
Null-Argumente
Wenn eines der Argumente NULL ist , ist das Ergebnis NULL :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS(null, 10, '$.weight') AS a,
JSON_CONTAINS(@json_document, null, '$.weight') AS b,
JSON_CONTAINS(@json_document, 10, null) AS c; Ergebnis:
+------+------+------+| ein | b | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+
Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_CONTAINS(); Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS“
Das Gleiche gilt, wenn Sie zu viele Argumente angeben:
SELECT JSON_CONTAINS('{ "a": 1}', 1, 2, 3); Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS“