Dans MariaDB, JSON_VALUE()
est une fonction intégrée qui renvoie une valeur scalaire à partir d'un document JSON. Plus précisément, il renvoie le scalaire spécifié par le chemin fourni.
Syntaxe
La syntaxe ressemble à ceci :
JSON_VALUE(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 = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.name');
Résultat :
+--------------------------------------------------+| JSON_VALUE(@json_document, '$.name') |+----------------------------------------- -+| Wag |+-------------------------------------------+
Chemin inexistant
Passer un chemin qui n'existe pas dans le document JSON donne NULL
.
Exemple :
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_VALUE(@json_document, '$.color');
Résultat :
+--------------------------------------------------+| JSON_VALUE(@json_document, '$.color') |+----------------------------------------- --+| NULL |+-------------------------------------------+
Tableaux
Voici un exemple de retour de données à partir d'un tableau :
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_VALUE(@json_document, '$.awards[1]');
Résultat :
+------------------------------------------------+| JSON_VALUE(@json_document, '$.awards[1]') |+------------------------------------------------ ---------+| Meilleur chien |+------------------------------------------------+Les tableaux sont basés sur zéro, et donc
$.awards[1]
extrait le second élément desawards
tableau.Objets imbriqués
Voici un exemple d'obtention d'une valeur à partir d'un objet imbriqué dans un autre objet :
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_VALUE( @json_document, '$.details.awards.Florida Dog Awards' ) AS Result;
Résultat :
+---------+| Résultat |+---------+| Top Dog |+---------+Valeurs non scalaires
Tenter de renvoyer une valeur non scalaire (par exemple, un objet ou un tableau) renvoie
NULL
.Exemple :
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_VALUE( @json_document, '$.details.awards' ) AS Result;
Résultat :
+--------+| Résultat |+--------+| NULL |+--------+Pour renvoyer une valeur non scalaire, utilisez le
JSON_QUERY()
fonction ou la fonctionJSON_EXTRACT()
fonction.Arguments nuls
Si un argument est
NULL
, le résultat estNULL
:SELECT JSON_VALUE(null, '$.type'), JSON_VALUE('{"a":1}', null);
Résultat :
+----------------------------+----------------- ------------+| JSON_VALUE(null, '$.type') | JSON_VALUE('{"a":1}', null) |+----------------------------+----- ------------------------+| NUL | NULL |+----------------------------+------------------ -----------+Nombre de paramètres incorrect
Ne fournir aucun argument génère une erreur :
SELECT JSON_VALUE();
Résultat :
ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_VALUE'Il en va de même lorsque vous fournissez trop ou trop peu d'arguments :
SELECT JSON_VALUE('{ "a": 1}');
Résultat :
ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_VALUE'