Kita dapat menggunakan SQLite json_remove()
berfungsi untuk menghapus satu atau lebih elemen dari objek atau larik JSON.
Kami meneruskan JSON asli sebagai argumen pertama saat kami memanggil fungsi, diikuti oleh satu atau beberapa jalur yang menentukan elemen mana yang akan dihapus. Yang saya maksud dengan “elemen” adalah elemen array atau anggota objek (pasangan kunci/nilai).
Sintaks
Sintaksnya seperti ini:
json_remove(X,P,...)
Dimana X
mewakili JSON asli, dan P,...
mewakili jalur yang akan dihapus.
Contoh
Berikut ini contoh untuk didemonstrasikan:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');
Hasil:
{"name":"Fluffy"}
Di sini, kami menentukan $.age
path, dan itulah yang dihapus dari dokumen JSON.
Hapus Banyak Anggota
Kami dapat menghapus beberapa anggota dari objek JSON dengan menentukan beberapa jalur, dipisahkan dengan koma:
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'$.type',
'$.age'
);
Hasil:
{"name":"Fluffy"}
Array
Kita dapat menghapus elemen array dengan menentukan indeks elemen:
SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');
Hasil:
[0,1,3]
Array berbasis nol, jadi penghitungan dimulai dari 0
.
Namun, penting untuk memperhatikan urutan penghapusan dilakukan. Penghapusan terjadi secara berurutan dari kiri ke kanan. Perubahan yang disebabkan oleh penghapusan sebelumnya dapat memengaruhi pencarian jalur untuk argumen berikutnya.
Berikut ini contoh bagaimana hal itu dapat memengaruhi hasil kami:
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[0]',
'$[2]'
);
Hasil:
[1,2]
Dalam hal ini, elemen larik 0
dihapus terlebih dahulu, lalu elemen larik 2
telah dihapus dari array yang tersisa. Dengan kata lain, jalur kedua menghapus elemen dari larik setelah jalur pertama telah dihapus.
Array yang dihasilkan adalah salah satu yang mungkin tidak kita antisipasi. Alih-alih menghapus elemen 0
dan 2
dari larik asli, kami telah menghapus elemen 0
dan 3
dari larik asli.
Kami dapat mengatasi masalah ini dengan menyusun ulang jalur:
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[2]',
'$[0]'
);
Hasil:
[1,3]
Tidak Ada Jalur
Argumen jalur sebenarnya opsional. Jika kita memanggil json_remove()
tanpa argumen jalur, ini mengembalikan versi input JSON yang diperkecil (yaitu dengan spasi berlebih yang dihapus):
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}'
);
Hasil:
{"name":"Fluffy","type":"Cat","age":10}
Ini adalah hasil yang sama yang kita dapatkan jika kita menggunakan json()
fungsi alih-alih json_remove()
.
Jalur Tidak Ada
Menentukan jalur yang tidak ada di JSON input menghasilkan JSON asli yang dikembalikan, tidak berubah:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');
Hasil:
{"name":"Fluffy","age":10}
Jalur Tidak Valid
Kami akan mendapatkan kesalahan jika jalur kami tidak terbentuk dengan baik:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');
Hasil:
Runtime error: JSON path error near 'age'
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_remove('{ "name" : "Fluffy", "age" }', '$.age');
Hasil:
Runtime error: malformed JSON
Kali ini kesalahan memberi tahu kami bahwa JSON kami salah format.