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_docadalah dokumen JSON.pathadalah jalur elemen untuk menyisipkan data atau memperbarui nilainya.valadalah 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'