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

SQLite JSON_REMOVE()

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

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é.