Di MariaDB, JSON_EXTRACT()
adalah fungsi bawaan yang mengekstrak data dari dokumen JSON, berdasarkan jalur atau jalur tertentu.
Itu dapat mengembalikan nilai tunggal dan banyak nilai. Jika satu nilai cocok, satu nilai dikembalikan. Jika beberapa nilai cocok, maka nilai tersebut dikembalikan dalam array.
Sintaks
Sintaksnya seperti ini:
JSON_EXTRACT(json_doc, path[, path] ...)
Dimana json_doc
adalah dokumen JSON, dan setiap path
argumen adalah jalur di dalam dokumen.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name');
Hasil:
+----------------------------------------+ | JSON_EXTRACT(@json_document, '$.name') | +----------------------------------------+ | "Wag" | +----------------------------------------+
Beberapa Jalur
Berikut adalah contoh menentukan beberapa jalur untuk mengembalikan beberapa nilai dari dokumen JSON.
Saat Anda mengembalikan beberapa nilai, nilai tersebut dikembalikan dalam array.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');
Hasil:
+----------------------------------------------------+ | JSON_EXTRACT(@json_document, '$.name', '$.weight') | +----------------------------------------------------+ | ["Wag", 20] | +----------------------------------------------------+
Jalur yang Tidak Ada
Melewati jalur yang tidak ada di dokumen JSON menghasilkan NULL
.
Contoh:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.color');
Hasil:
+-----------------------------------------+ | JSON_EXTRACT(@json_document, '$.color') | +-----------------------------------------+ | NULL | +-----------------------------------------+
Namun, jika beberapa jalur dilewatkan, dan setidaknya satu dari jalur tersebut cocok, maka nilai yang cocok akan diekstraksi dan dikembalikan dalam sebuah larik. Ini benar meskipun hanya satu nilai yang diekstraksi.
Contoh:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');
Hasil:
+---------------------------------------------------+ | JSON_EXTRACT(@json_document, '$.name', '$.color') | +---------------------------------------------------+ | ["Wag"] | +---------------------------------------------------+
Array
Berikut ini contoh mengekstrak data dari array:
SET @json_document = '
{
"_id" : 1,
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]');
Hasil:
+---------------------------------------------+ | JSON_EXTRACT(@json_document, '$.awards[0]') | +---------------------------------------------+ | "Top Dog" | +---------------------------------------------+
Array berbasis nol, jadi $.awards[0]
mengekstrak elemen pertama dari awards
larik.
Objek Bersarang
Berikut ini contoh mengekstrak data dari 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",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXTRACT(
@json_document,
'$.details.awards.New York Marathon'
) AS Result;
Hasil:
+---------------+ | Result | +---------------+ | "Fastest Dog" | +---------------+
Namun, jika kami ingin mengekstrak semua penghargaan, kami dapat mempersingkat jalur ke $.details.awards
:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_EXTRACT(
@json_document,
'$.details.awards'
) AS Result;
Hasil:
+---------------------------------------------------------------------------------------------------+ | Result | +---------------------------------------------------------------------------------------------------+ | {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"} | +---------------------------------------------------------------------------------------------------+
Mempercantik Hasilnya
Kita dapat membuat hasilnya lebih mudah dibaca dengan melewatkan JSON_EXTRACT()
ke JSON_DETAILED()
fungsi:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"weight" : 20,
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT
JSON_DETAILED(
JSON_EXTRACT(
@json_document,
'$.details.awards'
)
) AS Result;
Hasil:
+------------------------------------------------+ | Result | +------------------------------------------------+ | { "Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog" } | +------------------------------------------------+
Argumen Null
Jika ada argumen NULL
, hasilnya adalah NULL
:
SELECT
JSON_EXTRACT(null, '$.type'),
JSON_EXTRACT('{"a":1}', null);
Hasil:
+------------------------------+-------------------------------+ | JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) | +------------------------------+-------------------------------+ | NULL | NULL | +------------------------------+-------------------------------+
Jumlah Parameter Salah
Tidak memberikan argumen akan menyebabkan kesalahan:
SELECT JSON_EXTRACT();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'
Sama halnya ketika Anda memberikan argumen yang terlalu sedikit atau terlalu banyak:
SELECT JSON_EXTRACT('{ "a": 1}');
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_EXTRACT'