SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite JSON_PATCH()

In SQLite, il json_patch() La funzione può essere utilizzata per aggiungere, modificare o eliminare elementi di un oggetto JSON.

A tale scopo, esegue l'algoritmo RFC-7396 MergePatch per applicare una determinata patch all'input JSON specificato.

Passiamo il JSON originale come primo argomento quando chiamiamo la funzione, seguito dalla patch. La funzione applica quindi quella patch a JSON nel primo argomento.

Sintassi

La sintassi è questa:

json_patch(T,P)

Dove T rappresenta il JSON originale e P è la toppa. La funzione applica la patch P contro T .

Il contenuto della patch fornita P viene confrontato con il contenuto corrente del documento JSON di destinazione T . Se P contiene membri che non compaiono in T , quei membri vengono aggiunti. Se T contiene il membro, il valore viene sostituito.

Valori nulli in P hanno un significato speciale per indicare la rimozione dei valori esistenti in T .

Esempi

Ecco alcuni esempi da dimostrare.

Inserisci

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

Risultato:

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

Il tentativo di inserire un nuovo membro con un valore nullo non funziona:

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

Risultato:

{"name":"Fluffy"}

I valori Null vengono effettivamente utilizzati per rimuovere i membri dal JSON (come si vede in un esempio successivo).

Aggiorna

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

Risultato:

{"name":"Baldy"}

Se ci sono più coppie chiave/valore, ma vogliamo aggiornarne solo una, dobbiamo solo specificarla nel nostro secondo argomento:

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

Risultato:

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

Lo stesso concetto si applica quando si aggiornano più coppie chiave/valore:dobbiamo solo specificare quelle:

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

Risultato:

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

Aggiorna e inserisci

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

Risultato:

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

Elimina/Rimuovi

Ai valori Null nella patch di unione viene assegnato un significato speciale per indicare la rimozione dei valori esistenti nella destinazione:

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

Risultato:

{"name":"Fluffy"}

Array

Il json_patch() La funzione non può aggiungere elementi a un array, né modificare i singoli elementi di un array. Può solo inserire, sostituire o eliminare l'intero array come una singola unità.

Quindi, ecco un esempio di aggiunta di un elemento a un array:

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

Risultato:

[1,2,3,4]

Ho dovuto sostituire l'array originale con uno completamente nuovo. Quindi, tecnicamente, in realtà non ho aggiunto nulla:ho semplicemente sostituito l'intero array con un altro.

Lo stesso concetto si applica se l'array si trova all'interno di un oggetto:

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

Risultato:

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

Se devi lavorare con gli array, prova funzioni come json_set() , json_insert() , json_remove() e json_replace() invece.

Sostituisci un oggetto con un array

Possiamo sostituire gli oggetti con un array semplicemente fornendo un array come patch:

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

Risultato:

["Fluffy",10]

Sostituisci un array con un oggetto

E funziona anche al contrario:

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

Risultato:

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