SQLite
 sql >> Baza danych >  >> RDS >> SQLite

SQLite JSON_PATCH()

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}

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite - Upuść tabelę

  2. Wiersz aktualizacji Androida SQLite nie działa

  3. Przywróć bazę danych SQLite

  4. Jak wybrać dane między dwiema datami z sqlite db w formacie dd-mm-rrrr?

  5. Jak zaimplementować SQLCipher podczas korzystania z SQLiteOpenHelper