Nous pouvons utiliser le SQLite json_remove()
fonction pour supprimer un ou plusieurs éléments d'un objet ou d'un tableau JSON.
Nous transmettons le JSON d'origine comme premier argument lorsque nous appelons la fonction, suivi d'un ou plusieurs chemins qui spécifient les éléments à supprimer. Par "éléments", j'entends soit des éléments de tableau, soit des membres d'objet (paires clé/valeur).
Syntaxe
La syntaxe ressemble à ceci :
json_remove(X,P,...)
Où X
représente le JSON d'origine, et P,...
représente le ou les chemins à supprimer.
Exemple
Voici un exemple pour illustrer :
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');
Résultat :
{"name":"Fluffy"}
Ici, nous avons spécifié le $.age
path, et c'est ce qui a été supprimé du document JSON.
Supprimer plusieurs membres
Nous pouvons supprimer plusieurs membres d'un objet JSON en spécifiant plusieurs chemins, séparés par une virgule :
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'$.type',
'$.age'
);
Résultat :
{"name":"Fluffy"}
Tableaux
Nous pouvons supprimer les éléments du tableau en spécifiant l'index de l'élément :
SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');
Résultat :
[0,1,3]
Les tableaux sont basés sur zéro, et donc le comptage commence à partir de 0
.
Cependant, il est important de garder à l'esprit l'ordre dans lequel les suppressions sont effectuées. Les suppressions se produisent séquentiellement de gauche à droite. Les modifications causées par des suppressions antérieures peuvent affecter la recherche de chemin pour les arguments suivants.
Voici un exemple de la façon dont cela peut affecter notre résultat :
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[0]',
'$[2]'
);
Résultat :
[1,2]
Dans ce cas, élément de tableau 0
a été supprimé en premier, puis l'élément de tableau 2
a été supprimé du tableau restant. En d'autres termes, le deuxième chemin a supprimé l'élément du tableau après que le premier chemin ait déjà été supprimé.
Le tableau résultant est celui que nous n'avions peut-être pas prévu. Au lieu de supprimer les éléments 0
et 2
du tableau d'origine, nous avons supprimé les éléments 0
et 3
du tableau d'origine.
Nous pouvons résoudre ce problème en réorganisant les chemins :
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[2]',
'$[0]'
);
Résultat :
[1,3]
Aucun chemin
Les arguments de chemin sont en fait facultatifs. Si nous appelons json_remove()
sans arguments de chemin, il renvoie une version réduite du JSON d'entrée (c'est-à-dire avec les espaces blancs en excès supprimés) :
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}'
);
Résultat :
{"name":"Fluffy","type":"Cat","age":10}
C'est le même résultat que nous obtiendrions si nous utilisions le json()
fonction au lieu de json_remove()
.
Chemin inexistant
Si vous spécifiez un chemin qui n'existe pas dans le JSON d'entrée, le JSON d'origine est renvoyé, inchangé :
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');
Résultat :
{"name":"Fluffy","age":10}
Chemins non valides
Nous aurons une erreur si notre chemin n'est pas bien formé :
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');
Résultat :
Runtime error: JSON path error near 'age'
Dans ce cas, j'ai oublié d'inclure $.
au début du chemin.
Documents JSON non valides
Nous aurons également une erreur, le JSON n'est pas bien formé :
SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');
Résultat :
Runtime error: malformed JSON
Cette fois, l'erreur nous indique que notre JSON est malformé.