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

SQLite JSON_SET()

SQLite json_set() funkcja pozwala nam wstawić lub zastąpić wartość w dokumencie JSON.

Gdy wywołujemy funkcję, jako pierwszy argument przekazujemy oryginalny JSON, po którym następuje ścieżka określająca, gdzie wstawić/zamienić nową wartość, po której następuje wartość do wstawienia/zastąpienia.

W razie potrzeby możemy również wstawić/zamienić wiele par klucz/wartość.

Składnia

Działa to tak:

json_set(json, path1, value1, path2, value2...)

Gdzie json reprezentuje oryginalny JSON, a path1, value1, path2, value2... to pary ścieżka/wartość, których możemy użyć do wstawienia nowych wartości do dokumentu JSON (lub zastąpienia, w zależności od przypadku).

Przykład

Oto podstawowy przykład do zademonstrowania:

SELECT json_set('{ "a" : 1 }', '$.b', 2);

Wynik:

{"a":1,"b":2}

Tutaj wstawiłem nową parę klucz/wartość ("b":2 ) do dokumentu JSON.

Możemy wstawić wiele par klucz/wartość w ten sposób:

SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );

Wynik:

{"a":1,"b":2,"c":3}

Po prostu dodałem więcej argumentów klucz/wartość, gdy wywołałem json_set() .

Zamień wartości

Jeśli klucz już istnieje, jego wartość jest zastępowana nową wartością:

SELECT json_set('{ "a" : 1, "b" : 2 }', '$.b', 3);

Wynik:

{"a":1,"b":3}

To jest główna różnica między json_set() i json_insert() . json_insert() funkcja nie wstawi wartości, jeśli klucz już istnieje.

Innym sposobem na zastąpienie wartości jest użycie json_replace() .

Wstaw obiekt

Oto przykład wstawiania obiektu JSON:

SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );

Wynik:

{"a":1,"b":{"c":2}}

W tym przypadku użyłem json() funkcja, aby zwrócić mój argument jako ciąg JSON. Oto, co się dzieje, gdy tego nie robię:

SELECT json_set('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );

Wynik:

{"a":1,"b":"{ \"c\" : 2 }"}

Dokument JSON jest wstawiany jako wartość tekstowa zamiast obiektu JSON, dlatego jego podwójne cudzysłowy są poprzedzone ukośnikami odwrotnymi.

Jednak samo usunięcie pojedynczych cudzysłowów powoduje błąd:

SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );

Wynik:

Parse error: unrecognized token: "{"
  SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
                          error here ---^

Bez pojedynczych cudzysłowów lub json() funkcji, otrzymujemy błąd, gdy tylko napotka lewy nawias klamrowy.

Innym sposobem wstawienia obiektu JSON jest użycie json_object() funkcja zamiast json() funkcja:

SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );

Wynik:

{"a":1,"b":{"c":2}}

Wstaw tablicę

Podobnie jest z wstawianiem tablic:

SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

Wynik:

{"a":1,"b":[2,3,4]}

Jeśli usuniemy json() funkcja, otrzymujemy to:

SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');

Wynik:

{"a":1,"b":"[ 2, 3, 4 ]"}

A jeśli usuniemy pojedyncze cudzysłowy, otrzymamy błąd:

SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Wynik:

Parse error: no such column:  2, 3, 4 
  SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
                          error here ---^

Możemy alternatywnie użyć json_array() funkcja zamiast json() . Ta funkcja umożliwia utworzenie tablicy na podstawie jej argumentów:

SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

Wynik:

{"a":1,"b":[2,3,4]}

Dołącz wartości na końcu tablicy

Możemy użyć json_set() aby dołączyć wartości na końcu tablicy.

Aby to zrobić, użyj indeksu tablicy [#] :

SELECT json_set('[ 1, 2, 3 ]', '$[#]', 4 );

Wynik:

[1,2,3,4]

Ta sama zasada dotyczy tablic zagnieżdżonych:

SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

Wynik:

[1,["a","b","c"],3]

Zamień elementy tablicy

Możemy użyć json_set() aby zastąpić elementy w tablicy:

SELECT json_set('[ 1, 2, 3 ]', '$[1]', 4 );

Wynik:

[1,4,3]

Tablice są oparte na zerach, więc [1] wskazuje drugi element tablicy.

json_replace() funkcja może być również wykorzystana do zastąpienia istniejących elementów. Ponownie, różni się to od json_insert() , który nie zastępuje istniejących elementów.

Nieprawidłowe ścieżki

Otrzymamy błąd, jeśli nasza ścieżka nie jest dobrze uformowana:

SELECT json_set('{ "a" : 1 }', 'b', 2);

Wynik:

Runtime error: JSON path error near 'b'

W tym przypadku zapomniałem dołączyć $. z przodu ścieżki.

Nieprawidłowe dokumenty JSON

Otrzymamy również błąd, że JSON nie jest poprawnie sformułowany:

SELECT json_set('{ "a" : 1', '$.b', 2);

Wynik:

Runtime error: malformed JSON

Tym razem błąd mówi nam, że nasz JSON jest zniekształcony.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa funkcja JulianDay() w SQLite

  2. Dodaj wygenerowaną kolumnę do tabeli w SQLite

  3. SQLite - Zmień tabelę

  4. Jak sprawdzić, czy użytkownik jest obecny w bazie danych Sqlite za pomocą Androida?

  5. Czy naprawdę konieczne jest tworzenie tabel SQLite przy każdym uruchomieniu aplikacji?