Dans MySQL, le JSON_REMOVE()
La fonction supprime les données d'un document JSON et renvoie le résultat.
Vous fournissez le document JSON comme premier argument, suivi du chemin d'accès pour supprimer les données. Vous pouvez fournir plusieurs chemins si nécessaire.
Syntaxe
La syntaxe ressemble à ceci :
JSON_REMOVE(json_doc, chemin[, chemin] ...)
Où json_doc
est le document JSON, et path
est le chemin à partir duquel supprimer les données.
Le path
les arguments sont évalués de gauche à droite. Le document produit en évaluant un chemin devient la nouvelle valeur par rapport à laquelle le chemin suivant est évalué.
Le premier argument doit être un document JSON valide, sinon une erreur se produit.
Aussi, le path
l'argument doit être une expression de chemin valide et ne peut pas être $
ou contient un *
ou **
caractère générique, sinon une erreur se produira.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') AS 'Résultat' ;
Résultat :
+------------------+| Résultat |+------------------+| {"a":1, "c":3} |+------------------------------+
Dans ce cas, nous avons supprimé le couple clé/valeur avec la clé de b
. C'est parce que nous avons spécifié $.b
comme deuxième argument.
Voici un autre exemple :
SELECT JSON_REMOVE('{"Name":"Homer", "Gender":"Male", "Age":39}', '$.Age') AS 'Result';
Résultat :
+--------------------------------------------------+| Résultat |+--------------------------------------------------+| {"Nom":"Homère", "Sexe":"Homme"} |+------------------------------- ------+
Exemple 2 - Chemin inexistant
Si vous spécifiez un chemin qui n'existe pas, rien n'est supprimé. Le document JSON d'origine est renvoyé sans modification.
SELECT JSON_REMOVE('{"Name":"Homer", "Age":39}', '$.Gender') AS 'Result' ;
Résultat :
+------------------------------+| Résultat |+------------------------------+| {"Âge":39 ans, "Nom":"Homère"} |+------------------------------+Exemple 3 – Tableaux
Voici un exemple utilisant un tableau.
SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Résultat' ;Résultat :
+--------+| Résultat |+--------+| [2, 3] |+--------+Les tableaux utilisent une numérotation de base zéro, donc dans ce cas, le premier élément est supprimé du tableau.
Voici un autre exemple de tableau. Cette fois, nous supprimons une valeur d'un tableau imbriqué.
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Résultat' ;Résultat :
+----------------+| Résultat |+----------------+| [1, 2, [3, 5]] |+----------------+Exemple 4 – Chemins multiples
Vous pouvez spécifier plusieurs chemins pour supprimer des données à plusieurs endroits dans le document JSON.
Exemple de base :
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Résultat' ;Résultat :
+-----------+| Résultat |+-----------+| [1, 3, 4] |+-----------+Comme mentionné, le
path
les arguments sont évalués de gauche à droite, et le document produit en évaluant un chemin devient la nouvelle valeur par rapport à laquelle le chemin suivant est évalué.Par conséquent, dans cet exemple, le deuxième argument de chemin supprime une valeur différente de celle qu'il aurait supprimée s'il avait été le seul argument de chemin. S'il avait été le seul argument de chemin, il aurait supprimé
4
.Voici ce que je veux dire :
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'Un chemin', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') AS 'Deux chemins' ;Résultat :
+--------------+-----------+| Un chemin | Deux Chemins |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+-------------+-----------+Vous pouvez donc le voir lorsque nous utilisons
$[3]
comme seul chemin, il supprime4
du tableau. Mais lorsque nous l'utilisons comme 2ème chemin, cela supprime5
(et4
est laissé intact).Autre exemple, cette fois en supprimant des valeurs d'un tableau et d'un tableau imbriqué :
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Résultat' ;Résultat :
+-------------+| Résultat |+-------------+| [2, [3, 5]] |+-------------+Encore une fois, même si le tableau est à la position
2
dans le document d'origine, la première valeur du chemin ($[0]
) hache le tableau externe et le tableau interne passe à la position1
.Si cela vous fait tourner la tête, vous pouvez toujours échanger les arguments de chemin, de sorte que les valeurs les plus à droite soient supprimées en premier. De cette façon, cela n'affectera pas la position des valeurs les plus à gauche et, par conséquent, vous pouvez spécifier les chemins en fonction du document JSON d'origine.
Nous pouvons donc remplacer le code précédent par le suivant et obtenir le même résultat :
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Résultat' ;Résultat :
+-------------+| Résultat |+-------------+| [2, [3, 5]] |+-------------+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":["Manger", "Dormir", "Base Jumping"] } }' ; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';Résultat :
+------------------------------------------------------------ --------------------+| Résultat |+------------------------------------------------------------ -------------------+| {"Person":{"Name":"Homer", "Hobbies":["Manger", "Dormir"]}} |+------------------- -----------------------------------------------+