Di MariaDB, JSON_EXISTS()
adalah fungsi bawaan yang memungkinkan Anda memeriksa apakah ada nilai pada jalur yang ditentukan dalam dokumen JSON.
Ia menerima dokumen JSON sebagai argumen, dan mengembalikan 1
jika jalur ditemukan, dan 0
jika tidak.
Dokumentasi MariaDB menyatakan bahwa fungsi "menentukan apakah nilai JSON yang ditentukan ada dalam data yang diberikan". Namun, fungsi tersebut tidak benar-benar muncul untuk memeriksa nilai yang diberikan. Mungkin lebih akurat untuk mengatakan bahwa itu menentukan apakah jalur yang ditentukan ada, atau ada nilai di jalur yang ditentukan.
Untuk memeriksa apakah nilai yang sebenarnya ada, Anda dapat menggunakan JSON_CONTAINS()
fungsi.
Sintaks
Sintaksnya seperti ini:
JSON_EXISTS(json_doc, path)
Dimana json_doc
adalah dokumen JSON dan path
adalah jalan untuk menemukan.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Hasil:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+----------------------------- ----------------+| 1 |+---------------------------------------------------+Dalam hal ini, path ditemukan dan hasilnya adalah
1
.Jika jalur tidak ditemukan, hasilnya adalah
0
, seperti ini:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Hasil:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+--------------------------------------------+Array
Dalam contoh ini, saya memeriksa keberadaan elemen pada indeks tertentu dari array:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Hasil:
+--------+| Hasil |+--------+| 1 |+--------+Inilah yang terjadi jika indeks tidak ada dalam larik:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Hasil:
+--------+| Hasil |+--------+| 0 |+--------+Dokumen JSON Lebih Besar
Berikut adalah contoh yang menggunakan dokumen JSON yang sedikit lebih besar. Di sini, saya memeriksa kunci yang ada di dalam beberapa tingkat penyarangan:
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_EXISTS( @json_document, '$.details.awards.Sumo 2020' ) AS Result;
Hasil:
+--------+| Hasil |+--------+| 1 |+--------+Argumen Null
Jika salah satu argumennya adalah
NULL
, hasilnya adalahNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Hasil:
+--------------------------+------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- --------------------------+| NULL | NULL |+--------------------------+-------------------- -------------+JSON tidak valid
Melewati hasil JSON yang tidak valid dalam
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Hasil:
+---------------------------+| JSON_EXISTS('{1}', '$.a') |+---------------------------+| NULL |+-----------------------+Jumlah Parameter Salah
Tidak memberikan argumen akan menyebabkan kesalahan:
SELECT JSON_EXISTS();
Hasil:
ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'JSON_EXISTS'Sama halnya jika Anda memberikan terlalu banyak argumen:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Hasil:
ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'JSON_EXISTS'