Di MariaDB, JSON_INSERT()
adalah fungsi bawaan yang memasukkan data ke dalam dokumen JSON, dan mengembalikan hasilnya.
Sintaks
Sintaksnya seperti ini:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Dimana json_doc
adalah dokumen JSON, path
adalah jalur tempat data harus dimasukkan, dan val
adalah nilai yang akan disisipkan pada jalur tersebut.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.type', "Dog");
Hasil:
+----------------------------------------------+ | JSON_INSERT(@json_document, '$.type', "Dog") | +----------------------------------------------+ | {"name": "Wag", "type": "Dog"} | +----------------------------------------------+
Di sini saya memasukkan "type": "Dog"
ke dalam dokumen.
Dalam hal ini, saya menggunakan $.type
sebagai jalan. Oleh karena itu, type
adalah kuncinya dan Dog
adalah nilainya.
Saat Jalur Sudah Ada
Melewati jalur yang sudah ada di dokumen JSON menghasilkan dokumen asli yang dikembalikan tidak berubah.
Contoh:
SET @json_document = '
{
"name": "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");
Hasil:
+-----------------------------------------------+ | JSON_INSERT(@json_document, '$.name', "Bark") | +-----------------------------------------------+ | {"name": "Wag"} | +-----------------------------------------------+
Memasukkan Array
Berikut ini contoh penyisipan array ke dalam dokumen JSON:
SET @json_document = '
{
"name" : "Wag"
}
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');
Hasil:
+--------------------------------------------------------+ | JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') | +--------------------------------------------------------+ | {"name": "Wag", "scores": "[ 8, 7, 9 ]"} | +--------------------------------------------------------+
Menambahkan ke Array
Berikut ini contoh penggunaan JSON_INSERT()
untuk menambahkan data ke array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog");
Hasil:
+--------------------------------------------------------------+ | JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog") | +--------------------------------------------------------------+ | {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} | +--------------------------------------------------------------+
Namun, meskipun berfungsi dengan baik untuk contoh ini, itu bisa dengan mudah gagal. Misalnya, jika kita mencoba memasukkan nilai di tempat yang berbeda dalam array, itu tidak akan berhasil:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog" ]
}
';
SELECT JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog");
Hasil:
+-----------------------------------------------------------+ | JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") | +-----------------------------------------------------------+ | {"_id": 1, "awards": ["Top Dog", "Best Dog"]} | +-----------------------------------------------------------+
Untuk menyisipkan nilai ke dalam larik, gunakan JSON_ARRAY_INSERT()
fungsi sebagai gantinya.
Selain itu, meskipun kami dapat menambahkan nilai ke array dalam contoh di atas, Anda mungkin lebih baik menggunakan JSON_ARRAY_APPEND()
fungsi, karena dirancang khusus untuk tujuan itu.
Objek Bersarang
Berikut ini contoh menyisipkan nilai ke dalam objek yang bersarang di dalam objek lain:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog"
}
}
}
';
SELECT JSON_INSERT(
@json_document,
'$.details.awards.Sumo 2020',
'Biggest Dog'
);
Hasil:
{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}
Mempercantik Hasilnya
Kita dapat menggunakan JSON_DETAILED()
berfungsi untuk membuat hasil lebih mudah dibaca:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog"
}
}
}
';
SELECT
JSON_DETAILED(
JSON_INSERT(
@json_document,
'$.details.awards.Sumo 2020',
'Biggest Dog'
)
);
Hasil:
{ "_id": 1, "name": "Wag", "details": { "type": "Dog", "weight": 20, "awards": { "Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog" } } }
Argumen Null
Jika salah satu dari json_document
atau path
argumennya adalah NULL
, hasilnya adalah NULL
:
SELECT
JSON_INSERT(null, '$.type', 'Dog'),
JSON_INSERT('{"a":1}', null, 'Dog');
Hasil:
+------------------------------------+-------------------------------------+ | JSON_INSERT(null, '$.type', 'Dog') | JSON_INSERT('{"a":1}', null, 'Dog') | +------------------------------------+-------------------------------------+ | NULL | NULL | +------------------------------------+-------------------------------------+
Namun, jika value
argumennya adalah NULL
, kunci ditambahkan pada jalur yang ditentukan, dengan nilai null
:
SELECT JSON_INSERT('{"a":1}', '$.type', null);
Hasil:
+----------------------------------------+ | JSON_INSERT('{"a":1}', '$.type', null) | +----------------------------------------+ | {"a": 1, "type": null} | +----------------------------------------+
Jumlah Parameter Salah
Tidak memberikan argumen akan menyebabkan kesalahan:
SELECT JSON_INSERT();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Sama halnya ketika Anda memberikan argumen yang terlalu sedikit atau terlalu banyak:
SELECT JSON_INSERT('{ "a": 1}');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_INSERT'
Fungsi Serupa
JSON_REPLACE()
fungsi dapat memperbarui data yang ada.
JSON_SET()
fungsi dapat memperbarui data yang ada dan memasukkan data baru. Jadi JSON_SET()
seperti JSON_INSERT()
dan JSON_REPLACE()
dalam satu fungsi.