I SQLite, json_patch() funktionen kan användas för att lägga till, ändra eller ta bort element i ett JSON-objekt.
För att göra detta kör den RFC-7396 MergePatch-algoritmen för att applicera en given patch mot den givna JSON-ingången.
Vi skickar den ursprungliga JSON som det första argumentet när vi anropar funktionen, följt av patchen. Funktionen tillämpar sedan den patchen mot JSON i det första argumentet.
Syntax
Syntaxen ser ut så här:
json_patch(T,P)
Där T representerar den ursprungliga JSON och P är plåstret. Funktionen tillämpar patch P mot T .
Innehållet i den medföljande patchen P jämförs med det aktuella innehållet i JSON-måldokumentet T . Om P innehåller medlemmar som inte förekommer i T , läggs dessa medlemmar till. Om T innehåller medlemmen, ersätts värdet.
Nullvärden i P ges speciell betydelse för att indikera borttagandet av befintliga värden i T .
Exempel
Här är några exempel att visa.
Infoga
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }'); Resultat:
{"name":"Fluffy","age":10} Att försöka infoga en ny medlem med ett nullvärde fungerar inte:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }'); Resultat:
{"name":"Fluffy"} Nullvärden används faktiskt för att ta bort medlemmar från JSON (som ses i ett senare exempel).
Uppdatera
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }'); Resultat:
{"name":"Baldy"} Om det finns flera nyckel-/värdepar, men vi bara vill uppdatera ett, behöver vi bara ange det i vårt andra argument:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }'); Resultat:
{"name":"Baldy","age":10} Samma koncept gäller när du uppdaterar flera nyckel-/värdepar – vi behöver bara ange dessa:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
); Resultat:
{"name":"Baldy","type":"Cat","age":11} Uppdatera och infoga
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }'); Resultat:
{"name":"Baldy","age":10} Ta bort/ta bort
Nullvärden i sammanslagningskorrigeringen ges speciell betydelse för att indikera borttagandet av befintliga värden i målet:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }'); Resultat:
{"name":"Fluffy"} Arrayer
json_patch() Funktionen kan inte lägga till element i en array eller modifiera enskilda element i en array. Den kan bara infoga, ersätta eller ta bort hela arrayen som en enda enhet.
Så här är ett exempel på att lägga till ett element till en array:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]'); Resultat:
[1,2,3,4]
Jag var tvungen att ersätta den ursprungliga arrayen med en helt ny. Så tekniskt sett har jag faktiskt inte lagt till någonting – jag ersatte helt enkelt hela arrayen med en annan.
Samma koncept gäller om arrayen är inom ett objekt:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }'); Resultat:
{"scores":[1,2,3,4]}
Om du behöver arbeta med arrayer, prova funktioner som json_set() , json_insert() , json_remove() och json_replace() istället.
Ersätt ett objekt med en array
Vi kan ersätta objekt med en array genom att helt enkelt tillhandahålla en array som patch:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]'); Resultat:
["Fluffy",10]
Ersätt en array med ett objekt
Och det fungerar tvärtom också:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }'); Resultat:
{"name":"Fluffy","age":10}