Di MySQL, JSON_REMOVE()
fungsi menghapus data dari dokumen JSON dan mengembalikan hasilnya.
Anda memberikan dokumen JSON sebagai argumen pertama, diikuti dengan jalur untuk menghapus data. Anda dapat memberikan beberapa jalur jika diperlukan.
Sintaks
Sintaksnya seperti ini:
JSON_REMOVE(json_doc, path[, path] ...)
Dimana json_doc
adalah dokumen JSON, dan path
adalah jalur untuk menghapus data.
path
argumen dievaluasi dari kiri ke kanan. Dokumen yang dihasilkan dengan mengevaluasi satu jalur menjadi nilai baru yang digunakan untuk mengevaluasi jalur berikutnya.
Argumen pertama harus berupa dokumen JSON yang valid, jika tidak akan terjadi kesalahan.
Juga, path
argumen harus berupa ekspresi jalur yang valid, dan tidak boleh $
atau berisi *
atau **
wildcard, jika tidak akan terjadi kesalahan.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') SEBAGAI 'Hasil';
Hasil:
+------------------+| Hasil |+------------------+| {"a":1, "c":3} |+------------------+
Dalam hal ini, kami menghapus pasangan kunci/nilai dengan kunci b
. Ini karena kami menetapkan $.b
sebagai argumen kedua.
Ini contoh lain:
SELECT JSON_REMOVE('{"Name":"Homer", "Gender":"Male", "Age":39}', '$.Age') SEBAGAI 'Hasil';
Hasil:
+-------------------------------------+| Hasil |+------------------------------------------------+| {"Nama":"Homer", "Jenis Kelamin":"Pria"} |+------------------------------- ------+
Contoh 2 – Jalur Tidak Ada
Jika Anda menentukan jalur yang tidak ada, tidak ada yang dihapus. Dokumen JSON asli dikembalikan tanpa modifikasi.
SELECT JSON_REMOVE('{"Name":"Homer", "Age":39}', '$.Gender') SEBAGAI 'Hasil';
Hasil:
+-----------------------------+| Hasil |+----------------------------+| {"Usia":39, "Nama":"Homer"} |+------------------------------+Contoh 3 – Array
Berikut ini contoh penggunaan array.
SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') SEBAGAI 'Hasil';Hasil:
+--------+| Hasil |+--------+| [2, 3] |+--------+Array menggunakan penomoran berbasis nol, jadi dalam hal ini, elemen pertama dihapus dari array.
Berikut contoh array lainnya. Kali ini kami menghapus nilai dari array bersarang.
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') SEBAGAI 'Hasil';Hasil:
+----------------+| Hasil |+----------------+| [1, 2, [3, 5]] |+----------------+Contoh 4 – Beberapa Jalur
Anda dapat menentukan lebih dari satu jalur untuk menghapus data dari beberapa tempat di dokumen JSON.
Contoh dasar:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') SEBAGAI 'Hasil';Hasil:
+-----------+| Hasil |+------------+| [1, 3, 4] |+-----------+Seperti disebutkan,
path
argumen dievaluasi dari kiri ke kanan, dan dokumen yang dihasilkan dengan mengevaluasi satu jalur menjadi nilai baru yang digunakan untuk mengevaluasi jalur berikutnya.Oleh karena itu, dalam contoh ini, argumen jalur ke-2 menghapus nilai yang berbeda dengan nilai yang akan dihapus seandainya itu menjadi satu-satunya argumen jalur. Jika itu satu-satunya argumen jalur, itu akan menghapus
4
.Inilah yang saya maksud:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') SEBAGAI 'Satu Jalur', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') SEBAGAI 'Dua Jalur';Hasil:
+-------------+------------+| Satu Jalan | Dua Jalur |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+-----------+Jadi Anda bisa melihatnya saat kita menggunakan
$[3]
sebagai satu-satunya jalan, ia menghapus4
dari larik. Tetapi ketika kami menggunakannya sebagai jalur ke-2, itu menghapus5
(dan4
dibiarkan tidak tersentuh).Contoh lain, kali ini menghapus nilai dari larik, dan larik bersarang:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') SEBAGAI 'Hasil';Hasil:
+-------------+| Hasil |+-------------+| [2, [3, 5]] |+-------------+Jadi sekali lagi, meskipun array berada pada posisi
2
dalam dokumen asli, nilai jalur pertama ($[0]
) memotong larik luar, dan larik dalam berubah ke posisi1
.Jika ini membuat kepala Anda berputar, Anda selalu dapat menukar argumen jalur, sehingga nilai paling kanan dihapus terlebih dahulu. Dengan begitu, ini tidak akan memengaruhi posisi nilai paling kiri, dan oleh karena itu, Anda dapat menentukan jalur berdasarkan dokumen JSON asli.
Jadi kita bisa mengubah kode sebelumnya menjadi berikut, dan mendapatkan hasil yang sama:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') SEBAGAI 'Hasil';Hasil:
+-------------+| Hasil |+-------------+| [2, [3, 5]] |+-------------+Contoh 5 – Dokumen JSON yang Lebih Besar
Berikut ini contoh dengan dokumen JSON (sedikit) lebih besar.
SET @data ='{ "Orang":{ "Nama":"Homer", "Usia":39, "Hobi":["Makan", "Tidur", "Base Jumping"] } }'; PILIH JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') SEBAGAI 'Hasil';Hasil:
+------------------------------------------------- --------------------+| Hasil |+----------------------------------------------- -------------------+| {"Orang":{"Nama":"Homer", "Hobi":["Makan", "Tidur"]}} |+------------------- -----------------------------------------------+