I SQLite er json_patch() funktionen kan bruges til at tilføje, ændre eller slette elementer i et JSON-objekt.
For at gøre dette kører den RFC-7396 MergePatch-algoritmen for at anvende en given patch mod det givne JSON-input.
Vi sender den originale JSON som det første argument, når vi kalder funktionen, efterfulgt af patchen. Funktionen anvender derefter denne patch mod JSON i det første argument.
Syntaks
Syntaksen ser sådan ud:
json_patch(T,P)
Hvor T repræsenterer den originale JSON og P er lappen. Funktionen anvender patch P mod T .
Indholdet af den medfølgende patch P sammenlignes med det aktuelle indhold af JSON-måldokumentet T . Hvis P indeholder medlemmer, der ikke vises i T , tilføjes disse medlemmer. Hvis T indeholder medlemmet, erstattes værdien.
Nulværdier i P gives særlig betydning for at angive fjernelse af eksisterende værdier i T .
Eksempler
Her er nogle eksempler til demonstration.
Indsæt
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }'); Resultat:
{"name":"Fluffy","age":10} At forsøge at indsætte et nyt medlem med en nulværdi virker ikke:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }'); Resultat:
{"name":"Fluffy"} Null-værdier bruges faktisk til at fjerne medlemmer fra JSON (som vist i et senere eksempel).
Opdater
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }'); Resultat:
{"name":"Baldy"} Hvis der er flere nøgle/værdi-par, men vi kun ønsker at opdatere ét, behøver vi kun at angive det ene i vores andet argument:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }'); Resultat:
{"name":"Baldy","age":10} Det samme koncept gælder ved opdatering af flere nøgle/værdi-par – vi behøver kun at specificere disse:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
); Resultat:
{"name":"Baldy","type":"Cat","age":11} Opdater og indsæt
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }'); Resultat:
{"name":"Baldy","age":10} Slet/fjern
Nulværdier i flettepatchen tildeles en særlig betydning for at angive fjernelse af eksisterende værdier i målet:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }'); Resultat:
{"name":"Fluffy"} Arrays
json_patch() funktion kan ikke tilføje elementer til et array eller ændre individuelle elementer i et array. Den kan kun indsætte, erstatte eller slette hele arrayet som en enkelt enhed.
Så her er et eksempel på at tilføje et element til en matrix:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]'); Resultat:
[1,2,3,4]
Jeg var nødt til at erstatte det originale array med et helt nyt. Så teknisk set har jeg faktisk ikke tilføjet noget – jeg erstattede simpelthen hele arrayet med et andet.
Det samme koncept gælder, hvis arrayet er inden for et objekt:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }'); Resultat:
{"scores":[1,2,3,4]}
Hvis du har brug for at arbejde med arrays, prøv funktioner såsom json_set() , json_insert() , json_remove() og json_replace() i stedet.
Erstat et objekt med et array
Vi kan erstatte objekter med et array ved blot at levere et array som patch:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]'); Resultat:
["Fluffy",10]
Erstat et array med et objekt
Og det fungerer også omvendt:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }'); Resultat:
{"name":"Fluffy","age":10}