Dans MySQL, le JSON_EXTRACT()
La fonction renvoie les données d'un document JSON. Les données réelles renvoyées sont déterminées par le chemin que vous fournissez comme argument.
Vous fournissez le document JSON comme premier argument, suivi du chemin des données à renvoyer. Vous pouvez également fournir plusieurs chemins pour renvoyer des données à partir de plusieurs endroits dans le document.
Syntaxe
La syntaxe ressemble à ceci :
JSON_EXTRACT(json_doc, path[, path] ...)
Où json_doc
est le document JSON et le path
est le chemin vers la valeur à renvoyer.
S'il est possible que ces arguments renvoient plusieurs valeurs, les valeurs correspondantes sont automatiquement enveloppées sous forme de tableau, dans l'ordre correspondant aux chemins qui les ont produites.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_EXTRACT('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 2 | +--------+
Dans ce cas, nous avons renvoyé la valeur de la clé b
.
Voici un autre exemple :
SELECT JSON_EXTRACT('{"Name": "Bart", "Age": 10}', '$.Name') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | "Bart" | +--------+
Exemple 2 - Chemin inexistant
Si vous spécifiez un chemin qui n'existe pas, une valeur NULL est renvoyée.
SELECT JSON_EXTRACT('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | NULL | +--------+
Vous obtiendrez également une valeur NULL si l'un des arguments est NULL
.
Exemple 3 – Tableaux
Voici un exemple utilisant un tableau.
SELECT JSON_EXTRACT('[1, 2, 3]', '$[2]') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 3 | +--------+
Les tableaux utilisent une numérotation de base zéro, donc dans ce cas, le troisième élément est remplacé.
Voici un autre exemple de tableau. Cette fois, nous renvoyons une valeur d'un tableau imbriqué.
SELECT JSON_EXTRACT('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | 4 | +--------+
Exemple 4 – Chemins multiples
Vous pouvez spécifier plusieurs chemins afin de renvoyer des données à partir de plusieurs emplacements dans le document JSON.
Exemple de base :
SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Résultat :
+--------+ | Result | +--------+ | [2, 4] | +--------+
Exemple 5 - Un document JSON plus grand
Voici un exemple avec un document JSON légèrement plus grand.
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies') AS 'Result';
Résultat :
+---------------------------------------+ | Result | +---------------------------------------+ | ["Homer", 39, ["Eating", "Sleeping"]] | +---------------------------------------+
Nous pouvons également choisir un élément spécifique du tableau si nécessaire :
SET @data = '{ "Person": { "Name": "Homer", "Age": 39, "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_EXTRACT(@data, '$.Person.Name', '$.Person.Age', '$.Person.Hobbies[1]') AS 'Result';
Résultat :
+---------------------------+ | Result | +---------------------------+ | ["Homer", 39, "Sleeping"] | +---------------------------+