Mysql
 sql >> Base de données >  >> RDS >> Mysql

JSON_REMOVE() - Supprimer les données d'un document JSON dans MySQL

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] ...)

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 supprime 4 du tableau. Mais lorsque nous l'utilisons comme 2ème chemin, cela supprime 5 (et 4 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 position 1 .

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"]}} |+------------------- -----------------------------------------------+