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

SQLite JSON_SET()

SQLite json_set() fungsi memungkinkan kita untuk menyisipkan, atau mengganti, nilai dalam dokumen JSON.

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

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

Sintaks

Ini bekerja seperti ini:

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

Dimana json mewakili JSON asli, dan path1, value1, path2, value2... adalah pasangan jalur/nilai yang dapat kita gunakan untuk menyisipkan nilai baru ke dalam dokumen JSON (atau mengganti, tergantung kasusnya).

Contoh

Berikut adalah contoh dasar untuk ditunjukkan:

SELECT json_set('{ "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_set('{ "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_set() .

Ganti Nilai

Jika kunci sudah ada, nilainya diganti dengan nilai baru:

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

Hasil:

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

Ini adalah perbedaan utama antara json_set() dan json_insert() . json_insert() fungsi tidak akan memasukkan nilai jika kunci sudah ada.

Cara lain untuk mengganti nilai adalah dengan menggunakan json_replace() .

Menyisipkan Objek

Berikut ini contoh penyisipan objek JSON:

SELECT json_set('{ "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_set('{ "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.

Namun, menghapus tanda kutip tunggal akan menghasilkan kesalahan:

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

Hasil:

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

Hasil:

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

Menyisipkan Array

Hal serupa terjadi saat menyisipkan array:

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

Hasil:

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

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

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

Hasil:

Parse error: no such column:  2, 3, 4 
  SELECT json_set('{ "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_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

Hasil:

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

Menambahkan Nilai ke akhir Array

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

Untuk melakukan ini, gunakan indeks array [#] :

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

Hasil:

[1,2,3,4]

Prinsip yang sama berlaku untuk array bersarang:

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

Hasil:

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

Ganti Elemen Array

Kita dapat menggunakan json_set() untuk mengganti elemen dalam array:

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

Hasil:

[1,4,3]

Array berbasis nol, jadi [1] menunjukkan item larik kedua.

json_replace() fungsi juga dapat digunakan untuk menggantikan elemen yang ada. Sekali lagi, ini berbeda dengan json_insert() , yang tidak menggantikan elemen yang ada.

Jalur Tidak Valid

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

SELECT json_set('{ "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_set('{ "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. Dapatkan Posisi Karakter dalam String di SQLite dengan Instr()

  2. SQLite JSON_GROUP_OBJECT()

  3. Praktik terbaik untuk mengimplementasikan database aman untuk perangkat android

  4. Tambahkan Kolom yang Dihasilkan ke Tabel di SQLite

  5. SQLite PRIMARY key AutoIncrement tidak berfungsi