Di MariaDB, JSON_CONTAINS_PATH()
adalah fungsi bawaan yang menunjukkan apakah dokumen JSON tertentu berisi data pada jalur atau jalur yang ditentukan.
Ini mengembalikan 1
jika dokumen memang berisi data pada jalur yang ditentukan, 0
jika tidak, dan NULL
jika salah satu argumennya adalah NULL
.
Sintaks
Sintaksnya seperti ini:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Dimana json_doc
adalah dokumen JSON dan path
menentukan jalur untuk menemukan data. Beberapa jalur dapat disediakan.
return_arg
argumen menentukan bagaimana menangani banyak jalur. Bisa jadi one
atau all
.
one
– Fungsi mengembalikan1
jika setidaknya ada satu jalur dalam dokumen JSON.all
– Fungsi mengembalikan1
hanya jika semua jalur ada dalam dokumen JSON.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');
Hasil:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
Dalam hal ini, jalurnya ada, dan hasilnya adalah 1
.
Pada contoh berikut jalurnya tidak ada, dan hasilnya adalah 0
:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');
Hasil:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
Beberapa Jalur
Berikut adalah beberapa contoh yang mencari beberapa jalur dalam dokumen:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Dalam contoh ini kami mencari dua jalur. Satu jalan ada dan yang lain tidak. Tapi kami mendapat 1
toh (hasil positif). Ini karena kami menggunakan one
sebagai argumen kedua. one
menentukan bahwa kita akan mendapatkan 1
jika salah satu jalur ada.
Inilah yang terjadi jika kita menggunakan all
sebagai argumen kedua:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 0 | +--------+
Kali ini hasilnya 0
, karena tidak semua jalur ada di dokumen JSON.
Jika kita mengubah jalur yang hilang ($.type
) dengan yang ada, kita mendapatkan hasil yang berbeda:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Array
Berikut adalah contoh yang menguji apakah indeks yang diberikan ada dalam array:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Dan inilah yang terjadi jika kita meningkatkan indeks menjadi yang tidak ada:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 0 | +--------+
Struktur Bersarang
Berikut adalah contoh yang mencari jalur dalam dokumen bersarang:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result;
Hasil:
+--------+ | Result | +--------+ | 1 | +--------+
Argumen Null
Jika ada argumen NULL
, hasilnya adalah NULL
:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;
Hasil:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Jumlah Parameter Salah
Tidak memberikan argumen akan menyebabkan kesalahan:
SELECT JSON_CONTAINS_PATH();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
Hal yang sama terjadi ketika Anda tidak memberikan cukup argumen:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document);
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'