MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB JSON_CONTAINS() erklärt

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:

+---------------------------------------------- ----+| JSON_CONTAINS(@json_document, '{"name":"Wag"}') |+------------------------------- -------------------+| 1 |+---------------------------------------------- ---+

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:

+---------------------------------------------- -----+| JSON_CONTAINS(@json_document, '{"name":"Woof"}') |+------------------------------- --------------------+| 0 |+---------------------------------------------- ----+

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:

+--------------------------------------+| JSON_CONTAINS(@json_document, 'Wag') |+--------------------------------------+ | NULL |+---------------------------------------------------+1 Zeile im Satz, 1 Warnung ( 0,000 Sek.)

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:

+---------------------------------------------- -+| JSON_CONTAINS(@json_document, 10, '$.weight') |+----------------------------------- -------------+| 1 |+---------------------------------------------- +

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:

+---------------------------------------------- ----+| JSON_CONTAINS(@json_document, '"Wag"', '$.name') |+------------------------------- -------------------+| 1 |+---------------------------------------------- ---+

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:

+---------------------------------------------- --+| JSON_CONTAINS(@json_document, 'Wag', '$.name') |+--------------------------------------------- ---------------+| NULL |+------------------------------------------------------------ -+1 Zeile im Satz, 1 Warnung (0,000 Sek.)

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:

+---------------------------------------------- -------+| JSON_CONTAINS(@json_document, 30, '$.specs.height') |+---------------------------------------------- --------------------+| 1 |+---------------------------------------------- ------+

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“