Di MariaDB, JSON_REPLACE()
adalah fungsi bawaan yang menggantikan nilai yang ada dalam dokumen JSON dan mengembalikan hasilnya.
Sintaks
Sintaksnya seperti ini:
JSON_REPLACE(json_doc, path, val[, path, val] ...)
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT JSON_REPLACE(@json, '$.type', 'Dog');
Hasil:
+--------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Dog') | +--------------------------------------+ | {"name": "Wag", "type": "Dog"} | +--------------------------------------+
Dalam hal ini saya mengganti nilai Cat
dengan Dog
.
Elemen Array
Untuk mengganti elemen array, tentukan indeks elemen:
SET @json = '{ "name" : "Wag", "scores" : [8, 0, 9] }';
SELECT JSON_REPLACE(@json, '$.scores[1]', 7);
Hasil:
+---------------------------------------+ | JSON_REPLACE(@json, '$.scores[1]', 7) | +---------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +---------------------------------------+
Dalam hal ini, elemen array kedua diganti dengan nilai baru. Array berbasis nol, jadi $.scores[1]
mengacu pada elemen kedua dalam array.
Beberapa Jalur
Sintaks memungkinkan untuk mengganti nilai di beberapa jalur dengan satu panggilan ke JSON_REPLACE()
.
Saat menyediakan beberapa jalur, jalur tersebut dievaluasi dari kiri ke kanan. Artinya, hasil evaluasi sebelumnya digunakan sebagai nilai untuk evaluasi selanjutnya.
Pertama, berikut adalah contoh yang menggantikan beberapa nilai dalam dokumen, berdasarkan kuncinya:
SET @json = '
{
"name" : "Flutter",
"type" : "Bird",
"weight" : 10
}
';
SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);
Hasil:
+------------------------------------------------------+ | JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) | +------------------------------------------------------+ | {"name": "Flutter", "type": "Bat", "weight": 20} | +------------------------------------------------------+
Setiap nilai diganti seperti yang diharapkan.
Pada contoh berikutnya kita mengganti beberapa elemen dalam sebuah array:
SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
SELECT
JSON_REPLACE(
@json,
'$.scores[2]', "a",
'$.scores[4]', "b"
) AS Result;
Hasil:
+------------------------------------+ | Result | +------------------------------------+ | {"scores": [0, 1, "a", 3, "b", 5]} | +------------------------------------+
Argumen Null
Jika json_doc
atau salah satu path
argumennya adalah null
, hasilnya adalah NULL
. Tetapi jika value
argumennya adalah null
, maka nilainya diganti menjadi null
.
SELECT
JSON_REPLACE(null, '$.a', 1) AS a,
JSON_REPLACE('{"a":1}', null, 1) AS b,
JSON_REPLACE('{"a":1}', '$.a', null) AS c;
Hasil:
+------+------+-------------+ | a | b | c | +------+------+-------------+ | NULL | NULL | {"a": null} | +------+------+-------------+
Dalam contoh berikut, salah satu argumen jalur hilang dari setiap panggilan ke JSON_REPLACE()
. Ini menghasilkan NULL
dikembalikan untuk kedua panggilan:
SET @json = '{ "name" : "Wag", "type" : "Cat" }';
SELECT
JSON_REPLACE(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_REPLACE(@json, '$.name', 'Bark', null, 'Dog') AS b;
Hasil:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Jumlah Parameter Salah
Memanggil JSON_REPLACE()
tanpa argumen menghasilkan kesalahan:
SELECT JSON_REPLACE();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Sama halnya jika tidak cukup argumen yang diberikan:
SELECT JSON_REPLACE('{"a":1}');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REPLACE'
Fungsi Serupa
JSON_INSERT()
fungsi dapat menyisipkan data baru.
JSON_SET()
fungsi dapat menyisipkan data baru dan memperbarui data yang ada. Jadi JSON_SET()
seperti JSON_INSERT()
dan JSON_REPLACE()
dalam satu fungsi.