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

MariaDB JSON_EXISTS() erklärt

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 Ergebnis NULL :

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“