Saat menggunakan dokumen JSON dengan MySQL, Anda dapat menggunakan JSON_ARRAY_APPEND()
berfungsi untuk menambahkan nilai baru ke array.
Cara kerjanya adalah, Anda memberikan dokumen JSON sebagai argumen pertama, lalu mengikutinya dengan jalur untuk menambahkan, diikuti dengan nilai untuk ditambahkan.
Di MySQL 5.7, fungsi ini disebut JSON_APPEND()
tapi nama itu tidak lagi didukung.
Sintaks
Sintaksnya seperti ini:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
Dimana:
json_doc
adalah dokumen JSON.path
adalah jalur elemen yang akan ditambahkan nilai baru.val
adalah nilai baru yang akan ditambahkan.
Pasangan jalur-nilai dievaluasi dari kiri ke kanan. Dokumen yang dihasilkan dengan mengevaluasi satu pasangan menjadi nilai baru yang digunakan untuk mengevaluasi pasangan berikutnya.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';
Hasil:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Jadi argumen ke-3 ditambahkan ke array. Dalam hal ini, saya menggunakan $
untuk jalan. Ini adalah sinonim untuk dokumen JSON, jadi nilainya ditambahkan ke larik tingkat atas (yang dalam hal ini, merupakan satu-satunya larik).
Contoh 2 – Array Bersarang
Berikut ini contoh menambahkan nilai ke array yang bersarang di dalam array lain.
SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';
Hasil:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 4, 5]] | +-------------------+
Jadi di sini, saya menggunakan $[2]
sebagai jalan. Ini menentukan larik pada elemen ketiga (array menggunakan penomoran berbasis nol, jadi penghitungan dimulai dari nol).
Jika belum ada larik pada elemen itu, larik baru akan dibuat.
Seperti ini:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';
Hasil:
+----------------+ | Result | +----------------+ | [1, 2, [3, 4]] | +----------------+
Contoh 3 – Dokumen JSON yang Lebih Besar
Contoh ini menggunakan dokumen JSON (sedikit) lebih besar. Ini menunjukkan bagaimana jalur berubah tergantung di mana array berada dalam dokumen.
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';
Hasil:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Dan seperti pada contoh sebelumnya, kita juga dapat membuat array bersarang baru, jika diperlukan:
SET @data = '{ "Person": { "Name": "Homer", "Hobbies": ["Eating", "Sleeping"] } }'; SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';
Hasil:
+--------------------------------------------------------------------------------+ | Result | +--------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} | +--------------------------------------------------------------------------------+