MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB JSON_EXISTS() expliqué

Dans MariaDB, JSON_EXISTS() est une fonction intégrée qui vous permet de vérifier si une valeur existe à un chemin spécifié dans le document JSON.

Il accepte le document JSON comme argument et renvoie 1 si le chemin est trouvé, et 0 si ce n'est pas le cas.

La documentation MariaDB indique que la fonction "détermine si une valeur JSON spécifiée existe dans les données données". Cependant, la fonction ne semble pas réellement vérifier une valeur donnée. Il est probablement plus exact de dire qu'il détermine si un chemin spécifié existe, ou qu'une valeur existe au chemin spécifié.

Pour vérifier que la valeur réelle existe, vous pouvez utiliser le JSON_CONTAINS() fonction.

Syntaxe

La syntaxe ressemble à ceci :

JSON_EXISTS(json_doc, path) 

json_doc est le document JSON et le path est le chemin à trouver.

Exemple

Voici un exemple pour illustrer.

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name'); 

Résultat :

+-------------------------------------------------+| JSON_EXISTS('{ "nom":"Wag" }', '$.nom') |+---------------------------- ----------------+| 1 |+----------------------------------------------------------+ 

Dans ce cas, le chemin est trouvé et le résultat est 1 .

Si le chemin n'est pas trouvé, le résultat est 0 , comme ceci :

SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type'); 

Résultat :

+-------------------------------------------------+| JSON_EXISTS('{ "nom":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+----------------------------------------------------------+ 

Tableaux

Dans cet exemple, je vérifie l'existence d'un élément à un index donné d'un tableau :

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    "$.scores[2]"
    ) AS Result; 

Résultat :

+--------+| Résultat |+--------+| 1 |+--------+

Voici ce qui se passe si l'index n'existe pas dans le tableau :

SELECT JSON_EXISTS(
    '{ 
        "name": "Wag", 
        "scores": [ 10, 8, 7 ] 
    }', 
    '$.scores[3]'
    ) AS Result; 

Résultat :

+--------+| Résultat |+--------+| 0 |+--------+

Document JSON plus grand

Voici un exemple qui utilise un document JSON légèrement plus grand. Ici, je recherche une clé qui existe dans plusieurs niveaux d'imbrication :

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; 

Résultat :

+--------+| Résultat |+--------+| 1 |+--------+

Arguments nuls

Si l'un des arguments est NULL , le résultat est NULL :

SELECT 
    JSON_EXISTS(null, '$.a'),
    JSON_EXISTS('{ "a": 1 }', null); 

Résultat :

+--------------------------+---------------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- --------------------------+| NUL | NULL |+-----------------------------------+-------------------- -------------+

JSON non valide

Passer des résultats JSON invalides dans NULL :

SELECT JSON_EXISTS('{1}', '$.a'); 

Résultat :

+---------------------------+| JSON_EXISTS('{1}', '$.a') |+---------------------------+| NULL |+---------------------------+

Nombre de paramètres incorrect

Ne fournir aucun argument génère une erreur :

SELECT JSON_EXISTS(); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_EXISTS'

Il en va de même lorsque vous fournissez trop d'arguments :

SELECT JSON_EXISTS('{"a": 1}', '$.a', 3); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_EXISTS'