Dalam SQLite, json_patch()
fungsi dapat digunakan untuk menambah, mengubah, atau menghapus elemen Objek JSON.
Untuk melakukannya, ini menjalankan algoritme RFC-7396 MergePatch untuk menerapkan patch tertentu terhadap input JSON yang diberikan.
Kami meneruskan JSON asli sebagai argumen pertama saat kami memanggil fungsi, diikuti oleh tambalan. Fungsi tersebut kemudian menerapkan tambalan itu terhadap JSON dalam argumen pertama.
Sintaks
Sintaksnya seperti ini:
json_patch(T,P)
Dimana T
mewakili JSON asli, dan P
adalah patchnya. Fungsi tersebut menerapkan patch P
terhadap T
.
Isi dari patch yang disediakan P
dibandingkan dengan konten dokumen JSON target saat ini T
. Jika P
berisi anggota yang tidak muncul di T
, anggota tersebut ditambahkan. Jika T
tidak mengandung anggota, nilainya diganti.
Nilai nol di P
diberi arti khusus untuk menunjukkan penghapusan nilai yang ada di T
.
Contoh
Berikut adalah beberapa contoh untuk ditunjukkan.
Sisipkan
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : 10 }');
Hasil:
{"name":"Fluffy","age":10}
Mencoba memasukkan anggota baru dengan nilai nol tidak berhasil:
SELECT json_patch('{ "name" : "Fluffy" }', '{ "age" : null }');
Hasil:
{"name":"Fluffy"}
Nilai null sebenarnya digunakan untuk menghapus anggota dari JSON (seperti yang terlihat pada contoh selanjutnya).
Perbarui
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy" }');
Hasil:
{"name":"Baldy"}
Jika ada beberapa pasangan kunci/nilai, tetapi kita hanya ingin memperbarui satu, kita hanya perlu menentukan pasangan itu dalam argumen kedua:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "name" : "Baldy" }');
Hasil:
{"name":"Baldy","age":10}
Konsep yang sama berlaku saat memperbarui beberapa pasangan kunci/nilai – kita hanya perlu menentukan pasangan tersebut:
SELECT json_patch('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'{
"name" : "Baldy",
"age" : 11
}'
);
Hasil:
{"name":"Baldy","type":"Cat","age":11}
Perbarui &Sisipkan
SELECT json_patch('{ "name" : "Fluffy" }', '{ "name" : "Baldy", "age" : 10 }');
Hasil:
{"name":"Baldy","age":10}
Hapus/Hapus
Nilai null pada merge patch diberikan arti khusus untuk menunjukkan penghapusan nilai yang ada di target:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '{ "age" : null }');
Hasil:
{"name":"Fluffy"}
Array
json_patch()
fungsi tidak dapat menambahkan elemen ke array, atau memodifikasi elemen individual dari array. Itu hanya dapat menyisipkan, mengganti, atau menghapus seluruh larik sebagai satu unit.
Jadi, inilah contoh menambahkan elemen ke array:
SELECT json_patch('[ 1, 2, 3 ]', '[ 1, 2, 3, 4 ]');
Hasil:
[1,2,3,4]
Saya harus mengganti array asli dengan yang baru. Jadi secara teknis, saya tidak benar-benar menambahkan apa pun – saya hanya mengganti seluruh array dengan yang lain.
Konsep yang sama berlaku jika array berada di dalam objek:
SELECT json_patch('{ "scores" : [ 1, 2, 3 ] }', '{ "scores" : [ 1, 2, 3, 4 ] }');
Hasil:
{"scores":[1,2,3,4]}
Jika Anda perlu bekerja dengan array, coba fungsi seperti json_set()
, json_insert()
, json_remove()
dan json_replace()
sebagai gantinya.
Mengganti Objek dengan Array
Kita dapat mengganti objek dengan array hanya dengan menyediakan array sebagai patch:
SELECT json_patch('{ "name" : "Fluffy", "age" : 10 }', '[ "Fluffy", 10 ]');
Hasil:
["Fluffy",10]
Ganti Array dengan Objek
Dan itu bekerja sebaliknya juga:
SELECT json_patch('[ "Fluffy", 10 ]', '{ "name" : "Fluffy", "age" : 10 }');
Hasil:
{"name":"Fluffy","age":10}