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.