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

SQLite JSON_INSERT()

SQLite json_insert() funkcja pozwala nam wstawić nową wartość do dokumentu JSON.

Podczas wywoływania funkcji jako pierwszy argument przekazujemy oryginalny JSON, po którym następuje ścieżka określająca, gdzie należy wstawić nową wartość, po której następuje wartość do wstawienia.

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

Składnia

Funkcja nazywa się tak:

json_extract(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.

Przykład

Oto podstawowy przykład do zademonstrowania:

SELECT json_insert('{ "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_insert('{ "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_insert() .

Klucz/wartość już istnieje?

json_insert() funkcja nie wstawi wartości, jeśli klucz już istnieje:

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

Wynik:

{"a":1}

W tym przypadku klawisz a już istnieje w JSON, więc próba wstawienia nowej wartości dla tego klucza nie działa.

Aby zastąpić wartość, użyj json_replace() lub json_set() .

Wstaw obiekt

Oto przykład wstawiania innego dokumentu JSON:

SELECT json_insert('{ "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_insert('{ "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.

To jest jednak w porządku. W końcu umieściliśmy nową wartość w pojedynczych cudzysłowach. Skąd SQLite wiedział, czy chcemy wstawić ciąg znaków, czy obiekt JSON?

I nie jest tak, że możemy po prostu usunąć te pojedyncze cudzysłowy:

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

Wynik:

Parse error: unrecognized token: "{"
  SELECT json_insert('{ "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_insert('{ "a" : 1 }', '$.b', json_object('c', 2) );

Wynik:

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

Wstaw tablicę

Podobnie jest z wstawianiem tablic:

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

Wynik:

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

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

SELECT json_insert('{ "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_insert('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Wynik:

Parse error: no such column:  2, 3, 4 
  SELECT json_insert('{ "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_insert('{ "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_insert() aby dołączyć wartości na końcu tablicy.

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

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

Wynik:

[1,2,3,4]

Ta sama zasada dotyczy tablic zagnieżdżonych:

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

Wynik:

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

Nieprawidłowe ścieżki

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

SELECT json_insert('{ "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_insert('{ "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. 2 sposoby na zwrócenie dnia juliańskiego w SQLite

  2. Przypisywanie tabel za pomocą bazy danych Room w Android Studio

  3. SQLite - Utwórz kopię zapasową bazy danych do pliku

  4. dołącz do dwóch różnych kolumn tabeli sqlite3

  5. Wyjątek zapytania SQLite Kod błędu składni Android Studio 1