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

SQLite JSON_PATCH()

Dans SQLite, le json_patch() La fonction peut être utilisée pour ajouter, modifier ou supprimer des éléments d'un objet JSON.

Pour ce faire, il exécute l'algorithme RFC-7396 MergePatch pour appliquer un correctif donné à l'entrée JSON donnée.

Nous passons le JSON d'origine comme premier argument lorsque nous appelons la fonction, suivi du patch. La fonction applique ensuite ce correctif à JSON dans le premier argument.

Syntaxe

La syntaxe ressemble à ceci :

json_patch(T,P)

T représente le JSON d'origine, et P est le patch. La fonction applique le patch P contre T .

Le contenu du patch fourni P est comparé au contenu actuel du document JSON cible T . Si P contient des membres qui n'apparaissent pas dans T , ces membres sont ajoutés. Si T contient le membre, la valeur est remplacée.

Valeurs nulles dans P ont une signification spéciale pour indiquer la suppression des valeurs existantes dans T .

Exemples

Voici quelques exemples à démontrer.

Insérer

SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }');

Résultat :

{"name":"Fluffy","age":10}

Essayer d'insérer un nouveau membre avec une valeur nulle ne fonctionne pas :

SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');

Résultat :

{"name":"Fluffy"}

Les valeurs nulles sont en fait utilisées pour supprimer des membres du JSON (comme on le verra dans un exemple ultérieur).

Mettre à jour

SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');

Résultat :

{"name":"Baldy"}

S'il existe plusieurs paires clé/valeur, mais que nous ne voulons en mettre à jour qu'une seule, nous n'avons qu'à spécifier celle-ci dans notre deuxième argument :

SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }');

Résultat :

{"name":"Baldy","age":10}

Le même concept s'applique lors de la mise à jour de plusieurs paires clé/valeur - nous n'avons qu'à spécifier celles-ci :

SELECT json_patch('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '{ 
        "name" : "Baldy",
        "age" : 11
    }'
);

Résultat :

{"name":"Baldy","type":"Cat","age":11}

Mettre à jour et insérer

SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }');

Résultat :

{"name":"Baldy","age":10}

Supprimer/Supprimer

Les valeurs nulles dans le patch de fusion ont une signification particulière pour indiquer la suppression des valeurs existantes dans la cible :

SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }');

Résultat :

{"name":"Fluffy"}

Tableaux

Le json_patch() La fonction ne peut pas ajouter d'éléments à un tableau, ni modifier des éléments individuels d'un tableau. Il peut uniquement insérer, remplacer ou supprimer l'ensemble du tableau en une seule unité.

Voici donc un exemple d'ajout d'un élément à un tableau :

SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');

Résultat :

[1,2,3,4]

J'ai dû remplacer le tableau d'origine par un tout nouveau. Donc techniquement, je n'ai rien ajouté - j'ai simplement remplacé tout le tableau par un autre.

Le même concept s'applique si le tableau se trouve dans un objet :

SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');

Résultat :

{"scores":[1,2,3,4]}

Si vous devez travailler avec des tableaux, essayez des fonctions telles que json_set() , json_insert() , json_remove() et json_replace() à la place.

Remplacer un objet par un tableau

Nous pouvons remplacer les objets par un tableau en fournissant simplement un tableau comme patch :

SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');

Résultat :

["Fluffy",10]

Remplacer un tableau par un objet

Et ça marche aussi dans l'autre sens :

SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');

Résultat :

{"name":"Fluffy","age":10}