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

MariaDB JSON_CONTAINS_PATH() erklärt

In MariaDB JSON_CONTAINS_PATH() ist eine integrierte Funktion, die angibt, ob ein bestimmtes JSON-Dokument Daten im angegebenen Pfad oder in den angegebenen Pfaden enthält.

Es gibt 1 zurück wenn das Dokument Daten in den angegebenen Pfaden enthält, 0 wenn nicht, und NULL wenn eines der Argumente NULL ist .

Syntax

Die Syntax lautet wie folgt:

JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...) 

Wobei json_doc ist das JSON-Dokument und path gibt den Pfad an, für den Daten gesucht werden sollen. Es können mehrere Pfade angegeben werden.

Das return_arg Argument bestimmt, wie mit mehreren Pfaden umgegangen wird. Es kann one sein oder all .

  • one – Die Funktion gibt 1 zurück wenn mindestens ein Pfad innerhalb des JSON-Dokuments existiert.
  • all – Die Funktion gibt 1 zurück nur wenn alle Pfade im JSON-Dokument vorhanden sind.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung.

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name'); 

Ergebnis:

+---------------------------------------------- -------+| JSON_CONTAINS_PATH(@json_document, 'one', '$.name') |+--------------------------------- --------------------+| 1 |+---------------------------------------------- ------+

In diesem Fall existiert der Pfad und das Ergebnis ist 1 .

Im nächsten Beispiel existiert der Pfad nicht und das Ergebnis ist 0 :

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type'); 

Ergebnis:

+---------------------------------------------- -------+| JSON_CONTAINS_PATH(@json_document, 'one', '$.type') |+--------------------------------- --------------------+| 0 |+---------------------------------------------- ------+

Mehrere Pfade

Hier sind einige Beispiele, die nach mehreren Pfaden innerhalb des Dokuments suchen:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.type', 
        '$.weight'
        ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 1 |+--------+

In diesem Beispiel haben wir nach zwei Pfaden gesucht. Der eine Weg existiert und der andere nicht. Aber wir haben eine 1 trotzdem (ein positives Ergebnis). Das liegt daran, dass wir one verwendet haben als zweites Argument. Der one gibt an, dass wir eine 1 erhalten falls einer der Pfade existiert.

Folgendes passiert, wenn wir all verwenden als zweites Argument:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.type', 
    '$.weight'
    ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 0 |+--------+

Diesmal ist das Ergebnis 0 , da nicht alle Pfade im JSON-Dokument vorhanden sind.

Wenn wir den fehlenden Pfad ändern ($.type ) zu einem vorhandenen, erhalten wir ein anderes Ergebnis:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.name', 
    '$.weight'
    ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 1 |+--------+

Arrays

Hier ist ein Beispiel, das testet, ob ein bestimmter Index in einem Array vorhanden ist:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[2]'
        ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 1 |+--------+

Und Folgendes passiert, wenn wir den Index auf einen nicht vorhandenen erhöhen:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[3]'
        ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 0 |+--------+

Verschachtelte Strukturen

Hier ist ein Beispiel, das nach einem Pfad in einem verschachtelten Dokument sucht:

SET @json_document = '
    { 
        "name": "Wag", 
        "specs": { 
            "weight": 10, 
            "height": 30 
            } 
    }
';

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'one', 
    '$.specs.height'
    ) AS Result; 

Ergebnis:

+--------+| Ergebnis |+--------+| 1 |+--------+

Null-Argumente

Wenn irgendein Argument NULL ist , ist das Ergebnis NULL :

SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT 
    JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
    JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS_PATH(@json_document, 'one', null) AS c; 

Ergebnis:

+------+------+------+| ein | b | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+

Falsche Parameteranzahl

Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:

SELECT JSON_CONTAINS_PATH(); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS_PATH“

Dasselbe passiert, wenn Sie nicht genügend Argumente übergeben:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS_PATH(@json_document); 

Ergebnis:

FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS_PATH“