V SQLite, json_patch() funkci lze použít k přidání, úpravě nebo odstranění prvků objektu JSON.
Za tímto účelem spustí algoritmus RFC-7396 MergePatch, který aplikuje danou opravu na daný vstup JSON.
Původní JSON předáme jako první argument při volání funkce, následovaný patchem. Funkce pak aplikuje tuto opravu na JSON v prvním argumentu.
Syntaxe
Syntaxe vypadá takto:
json_patch(T,P)
Kde T představuje původní JSON a P je náplast. Funkce aplikuje patch P proti T .
Obsah poskytnutého patche P se porovnává s aktuálním obsahem cílového dokumentu JSON T . Pokud P obsahuje členy, které se nevyskytují v T , tito členové jsou přidáni. Pokud T obsahuje člen, hodnota je nahrazena.
Hodnoty Null v P mají zvláštní význam pro označení odstranění existujících hodnot v T .
Příklady
Zde je několik příkladů k demonstraci.
Vložit
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }'); Výsledek:
{"name":"Fluffy","age":10} Pokus o vložení nového člena s hodnotou null nefunguje:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }'); Výsledek:
{"name":"Fluffy"} Hodnoty Null se ve skutečnosti používají k odstranění členů z JSON (jak je vidět v pozdějším příkladu).
Aktualizovat
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }'); Výsledek:
{"name":"Baldy"} Pokud existuje více párů klíč/hodnota, ale my chceme aktualizovat pouze jeden, potřebujeme v našem druhém argumentu specifikovat pouze jeden:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }'); Výsledek:
{"name":"Baldy","age":10} Stejný koncept platí při aktualizaci více párů klíč/hodnota – potřebujeme pouze specifikovat tyto:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
); Výsledek:
{"name":"Baldy","type":"Cat","age":11} Aktualizovat a vložit
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }'); Výsledek:
{"name":"Baldy","age":10} Smazat/Odebrat
Hodnoty Null v patchi sloučení mají zvláštní význam, který označuje odstranění existujících hodnot v cíli:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }'); Výsledek:
{"name":"Fluffy"} Pole
json_patch() Funkce nemůže připojovat prvky k poli ani upravovat jednotlivé prvky pole. Může pouze vložit, nahradit nebo odstranit celé pole jako jednu jednotku.
Zde je příklad připojení prvku k poli:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]'); Výsledek:
[1,2,3,4]
Musel jsem vyměnit původní pole za zcela nové. Technicky jsem tedy ve skutečnosti nic nepřipojil – jednoduše jsem nahradil celé pole jiným.
Stejný koncept platí, pokud je pole v objektu:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }'); Výsledek:
{"scores":[1,2,3,4]}
Pokud potřebujete pracovat s poli, vyzkoušejte funkce jako json_set() , json_insert() , json_remove() a json_replace() místo toho.
Nahradit objekt polem
Objekty můžeme nahradit polem jednoduše tím, že pole dodáme jako záplatu:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]'); Výsledek:
["Fluffy",10]
Nahradit pole objektem
A funguje to i obráceně:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }'); Výsledek:
{"name":"Fluffy","age":10}