Dans MariaDB, JSON_QUERY()
est une fonction intégrée qui renvoie un objet ou un tableau à partir d'un document JSON, en fonction du chemin fourni.
C'est similaire au JSON_VALUE()
fonction, sauf qu'elle renvoie un objet ou un tableau au lieu d'un scalaire (JSON_VALUE()
renvoie un scalaire).
Syntaxe
La syntaxe ressemble à ceci :
JSON_QUERY(json_doc, path)
Où json_doc
est le document JSON, et path
est un chemin dans le document.
Exemple
Voici un exemple pour illustrer.
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_QUERY(@json_document, '$.details');
Résultat :
{ "type" :"Chien", "weight" :20, "awards" :{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Le plus gros chien" }}
Nous pouvons utiliser la notation par points pour descendre jusqu'au prochain objet imbriqué :
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_QUERY(@json_document, '$.details.awards');
Résultat :
{ "Florida Dog Awards" :"Top Dog", "New York Marathon" :"Fastest Dog", "Sumo 2020" :"Biggest Dog"}
Tableaux
Voici un exemple de renvoi d'un tableau :
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.awards');
Résultat :
+-------------------------------------------------------+| JSON_QUERY(@json_document, '$.awards') |+------------------------------------- -----+| [ "Meilleur chien", "Meilleur chien", "Le plus grand chien" ] |+-------------------------------- ----------+
Si vous voulez retourner un élément de tableau réel, essayez le JSON_VALUE()
fonction.
Chemin inexistant
Passer un chemin qui n'existe pas dans le document JSON donne NULL
.
Exemple :
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_QUERY(@json_document, '$.type');
Résultat :
+--------------------------------------------------+| JSON_QUERY(@json_document, '$.type') |+----------------------------------------- -+| NULL |+-------------------------------------------+
Valeurs scalaires
Tenter de renvoyer une valeur scalaire renvoie NULL
.
Exemple :
SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');
Résultat :
+-------------------------------------------------+| JSON_QUERY('{ "poids":10 }', '$.poids') |+------------------------------ --------------+| NULL |+-------------------------------------------------+Pour renvoyer une valeur scalaire, utilisez le
JSON_VALUE()
fonction.Arguments nuls
Si un argument est
NULL
, le résultat estNULL
:SELECT JSON_QUERY(null, '$.type'), JSON_QUERY('{"a":1}', null);
Résultat :
+----------------------------+----------------- ------------+| JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |+----------------------------+----- ------------------------+| NUL | NULL |+----------------------------+------------------ -----------+Nombre de paramètres incorrect
Ne fournir aucun argument génère une erreur :
SELECT JSON_QUERY();
Résultat :
ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_QUERY'Il en va de même lorsque vous fournissez trop ou trop peu d'arguments :
SELECT JSON_QUERY('{ "a": 1}');
Résultat :
ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_QUERY'