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}