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“