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)
Où 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 estNULL
: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'