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

MariaDB JSON_REMOVE() expliqué

Dans MariaDB, JSON_REMOVE() est une fonction intégrée qui supprime les données d'un document JSON et renvoie le résultat.

Syntaxe

La syntaxe ressemble à ceci :

JSON_REMOVE(json_doc, path[, path] ...) 

Exemple

Voici un exemple pour illustrer.

SET @json = '{ "name" : "Wag", "type" : "Dog" }';

SELECT JSON_REMOVE(@json, '$.type'); 

Résultat :

+------------------------------+| JSON_REMOVE(@json, '$.type') |+------------------------------+| {"name":"Wag"} |+------------------------------+

Dans ce cas, nous avons supprimé le membre de données type à partir du document. En d'autres termes, le type key et sa valeur associée ont été supprimées.

Tableaux

JSON_REMOVE() peut être utilisé pour supprimer tout le tableau ou des éléments spécifiques dans le tableau.

Pour supprimer tout le tableau, utilisez simplement le nom de la clé :

SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';

SELECT JSON_REMOVE(@json, '$.scores'); 

Résultat :

+---------------------------------------------+| JSON_REMOVE(@json, '$.scores') |+--------------------------------+| {"name":"Wag"} |+---------------------------------------------+

Cela a supprimé tout le tableau du document.

Pour supprimer un élément de tableau, spécifiez l'index de l'élément. Voici un exemple de suppression d'un élément de tableau d'un tableau :

SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';

SELECT JSON_REMOVE(@json, '$.scores[1]'); 

Résultat :

+-----------------------------------+| JSON_REMOVE(@json, '$.scores[1]') |+----------------------------------------------- -+| {"name":"Wag", "scores":[8, 9]} |+----------------------------- ------+

Dans ce cas, le deuxième élément du tableau a été supprimé. Les tableaux sont basés sur zéro, et donc $.scores[1] fait référence au deuxième élément du tableau.

Voir ci-dessous pour savoir comment JSON_REMOVE() traite de la suppression de plusieurs chemins dans le tableau.

Chemins multiples

Lorsque vous fournissez plusieurs chemins, ils sont évalués de gauche à droite. Cela signifie que le résultat de l'évaluation précédente est utilisé comme valeur pour la suivante.

Il est utile d'être particulièrement attentif à cela lors de la suppression d'éléments d'un tableau en fonction de leur index.

Tout d'abord, voici un exemple qui supprime plusieurs chemins d'un document, en fonction de leur clé :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog",
        "weight" : 10
    }
';

SELECT JSON_REMOVE(@json, '$.type', '$.weight'); 

Résultat :

+-------------------------------------------------------+| JSON_REMOVE(@json, '$.type', '$.weight') |+------------------------------- -----------+| {"name":"Wag"} |+----------------------------------------------------- ---+

Chaque paire clé/valeur a été supprimée comme prévu.

Dans l'exemple suivant, nous ne supprimons pas la paire clé/valeur. Au lieu de cela, nous supprimons plusieurs éléments d'un tableau :

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REMOVE(@json, '$.scores[2]', '$.scores[4]') AS a,
    JSON_REMOVE(@json, '$.scores[4]', '$.scores[2]') AS b; 

Résultat :

+--------------------------+---------------------------- -------+| un | b |+-----------------------------------+-------------------- ------+| {"scores":[0, 1, 3, 4]} | {"scores":[0, 1, 3, 5]} |+--------------------------+------ --------------------+

Dans ce cas, nous avons appelé JSON_REMOVE() à deux reprises. Les deux spécifient le même index de tableau à supprimer (2 et 4 ), mais nous échangeons les arguments lors du deuxième appel. Dans le premier exemple, il va 2 puis 4 (dans cet ordre). Dans le deuxième exemple, c'est 4 puis 2 .

Cela produisait un résultat différent pour chaque appel. Comme mentionné, plusieurs chemins sont évalués de gauche à droite, et l'ordre peut donc affecter le résultat.

Voici un autre exemple qui illustre comment le résultat peut être très différent, selon le nombre de chemins spécifiés, lesquels et dans quel ordre :

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f; 

Résultat (en utilisant la sortie verticale) :

a :{"scores":[1, 3, 4, 5]}b :{"scores":[2, 3, 4, 5]}c :{"scores":[1, 3, 4 ]}d :{"scores" :[2, 3, 4]}e :{"scores":[2, 3, 4, 5]}f :{"scores":[1, 3, 4, 5] } 

Arguments nuls

Si un argument est NULL , le résultat est NULL :

SELECT 
    JSON_REMOVE(null, '$.a') AS a,
    JSON_REMOVE('{"a":1}', null) AS b,
    JSON_REMOVE(null, null) AS c; 

Résultat :

+------+------+------+| un | b | c |+------+------+------+| NUL | NUL | NULL |+------+------+------+

Nombre de paramètres incorrect

Appel de JSON_REMOVE() sans argument génère une erreur :

SELECT JSON_REMOVE(); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_REMOVE'

C'est pareil quand pas assez d'arguments sont passés :

SELECT JSON_REMOVE('{"a":1}'); 

Résultat :

ERREUR 1582 (42000) :Nombre de paramètres incorrect dans l'appel à la fonction native 'JSON_REMOVE'