Dans MySQL, le JSON_VALUE()
La fonction extrait une valeur d'un document JSON au chemin spécifié.
La fonction a été introduite dans MySQL 8.0.21.
Syntaxe
La syntaxe ressemble à ceci :
JSON_VALUE(json_doc, path [RETURNING type] [on_empty] [on_error])
Où :
on_empty:
{NULL | ERROR | DEFAULT value} ON EMPTY
on_error:
{NULL | ERROR | DEFAULT value} ON ERROR
Exemple
Voici un exemple simple pour illustrer :
SELECT JSON_VALUE( '{ "name" : "Wag", "type" : "Dog" }', '$.type' );
Résultat :
Dog
Tableaux
Voici un exemple d'obtention d'une valeur à partir d'un tableau :
SELECT JSON_VALUE( '{ "name" : "Wag", "scores" : [ 25, 36, 48 ] }', '$.scores[1]' );
Résultat :
36
Les tableaux sont basés sur zéro, donc 1
renvoie le deuxième élément (0
renverrait le premier).
Documents intégrés
Voici un exemple d'obtention d'une valeur à partir d'un objet intégré :
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details.type'
);
Résultat :
Dog
Type de retour
Voici un exemple de spécification du type de retour :
SELECT JSON_VALUE(
'{
"_id" : 1,
"details" : {
"name" : "Wag",
"type" : "Dog"
}
}',
'$.details' RETURNING json
);
Résultat :
{"name": "Wag", "type": "Dog"}
Si vous ne spécifiez pas le type de retour, le type de retour est VARCHAR(512)
.
Résultats vides
Par défaut, si aucune donnée n'est trouvée dans le chemin spécifié, NULL
est renvoyé :
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
);
Résultat :
NULL
Cependant, les options suivantes peuvent être utilisées pour spécifier explicitement ce qui doit se passer lorsqu'aucune donnée n'est trouvée dans le chemin donné :
NULL ON EMPTY
:La fonction retourneNULL
; c'est le comportement par défaut.DEFAULT
:lavalue
SUR VIDEvalue
fournie est retourné. Le type de la valeur doit correspondre à celui du type de retour.ERROR ON EMPTY
:La fonction renvoie une erreur.
Exemple :
SELECT JSON_VALUE(
'{
"name" : "Wag",
"type" : "Dog"
}',
'$.score'
DEFAULT 'Nothing found' ON EMPTY
);
Résultat :
Nothing found
Erreurs
Les éléments suivants peuvent être utilisés pour spécifier ce qui se passe lorsqu'une erreur se produit :
NULL ON ERROR
:JSON_VALUE()
renvoieNULL
; c'est le comportement par défaut.DEFAULT
:Il s'agit de la valeur renvoyée ; sa valeur doit correspondre à celle du type de retour.value
SUR ERREURERROR ON ERROR
:Une erreur est renvoyée.
Si utilisé, ON EMPTY
doit précéder tout ON ERROR
clause. Les spécifier dans le mauvais ordre entraîne une erreur de syntaxe.
Index
Comme mentionné dans les notes de version de MySQL 8.0.21, le JSON_VALUE()
la fonction simplifie la création d'index sur JSON
Colonnes. Un appel à JSON_VALUE(
équivaut à appeler json_doc
, path
RETOUR type
)CAST( JSON_UNQUOTE( JSON_EXTRACT(
.json_doc
, path
) ) AS type
)
Voici l'exemple utilisé dans les notes de version :
CREATE TABLE inventory(
items JSON,
INDEX i1 ( (JSON_VALUE(items, '$.name' RETURNING CHAR(50))) ),
INDEX i2 ( (JSON_VALUE(items, '$.price' RETURNING DECIMAL(5,2))) ),
INDEX i3 ( (JSON_VALUE(items, '$.quantity' RETURNING UNSIGNED)) )
);