SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

SQLite JSON_INSERT()

SQLite json_insert() fungsi memungkinkan kita untuk memasukkan nilai baru ke dalam dokumen JSON.

Kami meneruskan JSON asli sebagai argumen pertama saat kami memanggil fungsi, diikuti oleh jalur yang menentukan tempat untuk menyisipkan nilai baru, diikuti dengan nilai yang akan disisipkan.

Kami juga dapat menyisipkan beberapa pasangan kunci/nilai jika diperlukan.

Sintaks

Fungsi ini dipanggil seperti ini:

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

Dimana json mewakili JSON asli, dan path1, value1, path2, value2... adalah pasangan jalur/nilai yang dapat kita gunakan untuk memasukkan nilai baru ke dalam dokumen JSON.

Contoh

Berikut adalah contoh dasar untuk ditunjukkan:

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

Hasil:

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

Di sini, saya memasukkan pasangan kunci/nilai baru ("b":2 ) ke dalam dokumen JSON.

Kita dapat menyisipkan beberapa pasangan kunci/nilai seperti ini:

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

Hasil:

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

Saya hanya menambahkan lebih banyak argumen kunci/nilai ketika saya memanggil json_insert() .

Kunci/Nilai Sudah Ada?

json_insert() fungsi tidak akan memasukkan nilai jika kunci sudah ada:

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

Hasil:

{"a":1}

Dalam hal ini, kunci a sudah ada di JSON, jadi mencoba memasukkan nilai baru untuk kunci itu tidak berhasil.

Untuk mengganti nilai, gunakan json_replace() atau json_set() .

Menyisipkan Objek

Berikut ini contoh memasukkan dokumen JSON lain:

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

Hasil:

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

Dalam hal ini, saya menggunakan json() fungsi untuk mengembalikan argumen saya sebagai string JSON. Inilah yang terjadi jika saya tidak melakukannya:

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

Hasil:

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

Dokumen JSON disisipkan sebagai nilai teks alih-alih objek JSON, dan oleh karena itu tanda kutip ganda diloloskan dengan garis miring terbalik.

Ini cukup adil. Bagaimanapun, kami menyertakan nilai baru dalam tanda kutip tunggal. Bagaimana SQLite mengetahui apakah kita ingin menyisipkan string atau objek JSON?

Dan kita tidak bisa begitu saja menghapus tanda kutip tunggal itu:

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

Hasil:

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

Tanpa tanda kutip tunggal atau json() fungsi, kami mendapatkan kesalahan segera setelah menemukan kurung kurawal kiri.

Cara lain untuk menyisipkan objek JSON adalah dengan menggunakan json_object() fungsi alih-alih json() fungsi:

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

Hasil:

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

Menyisipkan Array

Hal serupa terjadi saat menyisipkan array:

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

Hasil:

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

Jika kita menghapus json() fungsi, kita mendapatkan ini:

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

Hasil:

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

Dan jika kita menghapus tanda kutip tunggal, kita mendapatkan kesalahan:

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

Hasil:

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

Sebagai alternatif, kita dapat menggunakan json_array() fungsi alih-alih json() . Fungsi tersebut memungkinkan Anda membuat array berdasarkan argumennya:

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

Hasil:

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

Menambahkan Nilai ke akhir Array

Kita dapat menggunakan json_insert() untuk menambahkan nilai ke akhir array.

Untuk melakukan ini, gunakan indeks array [#] :

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

Hasil:

[1,2,3,4]

Prinsip yang sama berlaku untuk array bersarang:

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

Hasil:

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

Jalur Tidak Valid

Kami akan mendapatkan kesalahan jika jalur kami tidak terbentuk dengan baik:

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

Hasil:

Runtime error: JSON path error near 'b'

Dalam hal ini, saya lupa memasukkan $. di depan jalan.

Dokumen JSON Tidak Valid

Kami juga akan mendapatkan kesalahan JSON tidak terbentuk dengan baik:

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

Hasil:

Runtime error: malformed JSON

Kali ini kesalahan memberi tahu kami bahwa JSON kami salah format.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membaca dan memperbarui database SQLite menggunakan ListView di Android?

  2. Disebabkan oleh:android.database.sqlite.SQLiteException:tidak ada tabel seperti itu:BOOK (kode 1 SQLITE_ERROR)

  3. Cara terbaik untuk menyimpan json

  4. Perbedaan Antara NullIf() dan IfNull() di SQLite

  5. Database sqlite memperbarui baris android