Di MariaDB, JSON_SET()
adalah fungsi bawaan yang memperbarui atau memasukkan data ke dalam dokumen JSON dan mengembalikan hasilnya.
JSON_SET()
dapat memperbarui dan menyisipkan data, sedangkan JSON_INSERT()
hanya dapat menyisipkan data, dan JSON_REPLACE()
hanya dapat memperbarui data.
Sintaks
Sintaksnya seperti ini:
JSON_SET(json_doc, path, val[, path, val] ...)
Dimana:
json_doc
adalah dokumen JSON.path
adalah jalur elemen untuk menyisipkan data atau memperbarui nilainya.val
adalah nilai baru.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT JSON_SET(@json, '$.type', 'Dog');
Hasil:
+----------------------------------+ | JSON_SET(@json, '$.type', 'Dog') | +----------------------------------+ | {"name": "Wag", "type": "Dog"} | +----------------------------------+
Dalam hal ini saya memperbarui nilai type
anggota Cat
ke Dog
.
Elemen Array
Untuk memperbarui atau menyisipkan elemen larik, tentukan indeks elemen:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[1]', 7);
Hasil:
+--------------------------------------+ | JSON_SET(@json, '$.scores[1]', 7) | +--------------------------------------+ | {"name": "Wag", "scores": [8, 7, 9]} | +--------------------------------------+
Dalam hal ini, elemen array kedua diperbarui dengan nilai baru. Array berbasis nol, jadi $.scores[1]
mengacu pada elemen kedua dalam array.
Sisipkan Data
Contoh sebelumnya memperbarui data yang ada. Berikut ini contoh memasukkan data baru:
SET @json = '
{
"name" : "Wag",
"type" : "Dog"
}
';
SELECT JSON_SET(@json, '$.weight', 10);
Hasil:
+----------------------------------------------+ | JSON_SET(@json, '$.weight', 10) | +----------------------------------------------+ | {"name": "Wag", "type": "Dog", "weight": 10} | +----------------------------------------------+
Di sini, kami memasukkan pasangan kunci/nilai baru ("weight": 10
).
Di bawah ini adalah contoh menambahkan elemen baru ke array:
SET @json = '
{
"name" : "Wag",
"scores" : [8, 0, 9]
}
';
SELECT JSON_SET(@json, '$.scores[3]', 7);
Hasil:
+-----------------------------------------+ | JSON_SET(@json, '$.scores[3]', 7) | +-----------------------------------------+ | {"name": "Wag", "scores": [8, 0, 9, 7]} | +-----------------------------------------+
Contoh array ini juga dapat dilakukan dengan JSON_ARRAY_INSERT()
atau JSON_ARRAY_APPEND()
.
Beberapa Jalur
Sintaksnya memungkinkan untuk menyetel/memperbarui nilai di beberapa jalur dengan satu panggilan ke JSON_SET()
.
Contoh:
SET @json = '
{
"name" : "Scratch",
"type" : "Rat"
}
';
SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);
Hasil:
+--------------------------------------------------+ | JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) | +--------------------------------------------------+ | {"name": "Scratch", "type": "Cat", "weight": 10} | +--------------------------------------------------+
Pada contoh berikutnya kita memasukkan nilai baru ke dalam array, dan memperbarui yang lain:
SET @json = '{ "scores" : [ 0, 1, 2 ] }';
SELECT
JSON_SET(
@json,
'$.scores[1]', "a",
'$.scores[3]', "b"
) AS Result;
Hasil:
+------------------------------+ | Result | +------------------------------+ | {"scores": [0, "a", 2, "b"]} | +------------------------------+
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_SET(null, '$.a', 1) AS a,
JSON_SET('{"a":1}', null, 1) AS b,
JSON_SET('{"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_SET()
. Dalam kedua kasus, hasilnya adalah NULL
:
SET @json = '
{
"name" : "Wag",
"type" : "Cat"
}
';
SELECT
JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;
Hasil:
+------+------+ | a | b | +------+------+ | NULL | NULL | +------+------+
Jumlah Parameter Salah
Memanggil JSON_SET()
tanpa argumen menghasilkan kesalahan:
SELECT JSON_SET();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'
Sama halnya jika tidak cukup argumen yang diberikan:
SELECT JSON_SET('{"a":1}');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_SET'