W SQLite json_patch() funkcja może być używana do dodawania, modyfikowania lub usuwania elementów obiektu JSON.
Aby to zrobić, uruchamia algorytm MergePatch RFC-7396, aby zastosować daną poprawkę do danych wejściowych JSON.
Podczas wywoływania funkcji przekazujemy oryginalny JSON jako pierwszy argument, po którym następuje łatka. Funkcja następnie stosuje tę poprawkę do JSON w pierwszym argumencie.
Składnia
Składnia wygląda tak:
json_patch(T,P)
Gdzie T reprezentuje oryginalny JSON, a P jest łatka. Funkcja stosuje łatkę P przeciwko T .
Zawartość dostarczonej łatki P jest porównywany z bieżącą zawartością docelowego dokumentu JSON T . Jeśli P zawiera członków, którzy nie pojawiają się w T , ci członkowie są dodawani. Jeśli T zawiera członka, wartość jest zastępowana.
Wartości null w P mają specjalne znaczenie, aby wskazać usunięcie istniejących wartości w T .
Przykłady
Oto kilka przykładów do zademonstrowania.
Wstaw
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }'); Wynik:
{"name":"Fluffy","age":10} Próba wstawienia nowego członka z wartością null nie działa:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }'); Wynik:
{"name":"Fluffy"} Wartości null są w rzeczywistości używane do usuwania członków z JSON (jak widać w późniejszym przykładzie).
Aktualizacja
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }'); Wynik:
{"name":"Baldy"} Jeśli istnieje wiele par klucz/wartość, ale chcemy zaktualizować tylko jedną, wystarczy określić tę jedną w naszym drugim argumencie:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }'); Wynik:
{"name":"Baldy","age":10} Ta sama koncepcja dotyczy aktualizacji wielu par klucz/wartość – musimy tylko określić te pary:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
); Wynik:
{"name":"Baldy","type":"Cat","age":11} Aktualizuj i wstaw
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }'); Wynik:
{"name":"Baldy","age":10} Usuń/Usuń
Wartości null w łatce scalającej mają specjalne znaczenie, aby wskazać usunięcie istniejących wartości w celu:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }'); Wynik:
{"name":"Fluffy"} Tablice
json_patch() Funkcja nie może dołączać elementów do tablicy ani modyfikować poszczególnych elementów tablicy. Może tylko wstawiać, zastępować lub usuwać całą tablicę jako pojedynczą jednostkę.
Oto przykład dołączenia elementu do tablicy:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]'); Wynik:
[1,2,3,4]
Musiałem wymienić oryginalną tablicę na zupełnie nową. Więc technicznie rzecz biorąc, właściwie niczego nie dodałem – po prostu wymieniłem całą tablicę na inną.
Ta sama koncepcja ma zastosowanie, jeśli tablica znajduje się w obiekcie:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }'); Wynik:
{"scores":[1,2,3,4]}
Jeśli potrzebujesz pracować z tablicami, wypróbuj funkcje takie jak json_set() , json_insert() , json_remove() i json_replace() zamiast tego.
Zamień obiekt na tablicę
Możemy zastąpić obiekty tablicą, po prostu dostarczając tablicę jako łatkę:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]'); Wynik:
["Fluffy",10]
Zamień tablicę na obiekt
Działa to też w drugą stronę:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }'); Wynik:
{"name":"Fluffy","age":10}