Di MariaDB, JSON_CONTAINS()
adalah fungsi bawaan yang memungkinkan Anda mengetahui apakah nilai tertentu ditemukan dalam dokumen JSON yang diberikan, atau pada jalur tertentu di dalam dokumen.
Ini mengembalikan 1
jika memang mengandung nilai, 0
jika tidak, dan NULL
jika salah satu argumennya adalah NULL
.
Sintaks
Sintaksnya seperti ini:
JSON_CONTAINS(json_doc, val[, path])
Dimana json_doc
adalah dokumen JSON, val
adalah nilai yang akan ditemukan, dan path
nilai opsional yang menentukan jalur dalam dokumen.
Contoh
Berikut ini contoh untuk didemonstrasikan.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Wag"}');
Hasil:
+--------------------------------------------------+ | JSON_CONTAINS(@json_document, '{"name": "Wag"}') | +--------------------------------------------------+ | 1 | +--------------------------------------------------+
Dalam hal ini, ada kecocokan, dan hasilnya adalah 1
.
Pada contoh berikutnya, tidak ada yang cocok:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '{"name": "Woof"}');
Hasil:
+---------------------------------------------------+ | JSON_CONTAINS(@json_document, '{"name": "Woof"}') | +---------------------------------------------------+ | 0 | +---------------------------------------------------+
Perhatikan bahwa nilai diapit oleh kurung kurawal.
Inilah yang terjadi jika argumen kedua tidak valid:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag');
Hasil:
+--------------------------------------+ | JSON_CONTAINS(@json_document, 'Wag') | +--------------------------------------+ | NULL | +--------------------------------------+ 1 row in set, 1 warning (0.000 sec)
Mari kita lihat peringatannya:
SHOW WARNINGS;
Hasil:
+---------+------+-----------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------------------+ | Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 | +---------+------+-----------------------------------------------------------------------------------+
Tentukan Jalur
Anda dapat secara opsional menggunakan argumen ketiga untuk menentukan jalur.
Contoh:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 10, '$.weight');
Hasil:
+-----------------------------------------------+ | JSON_CONTAINS(@json_document, 10, '$.weight') | +-----------------------------------------------+ | 1 | +-----------------------------------------------+
Saat menentukan jalur, saya tidak perlu menggunakan kurung kurawal.
Ini dia yang mencari string:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, '"Wag"', '$.name');
Hasil:
+--------------------------------------------------+ | JSON_CONTAINS(@json_document, '"Wag"', '$.name') | +--------------------------------------------------+ | 1 | +--------------------------------------------------+
Perhatikan saya menggunakan tanda kutip ganda di dalam tanda kutip tunggal. Jika saya menghilangkan tanda kutip ganda, inilah yang terjadi:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS(@json_document, 'Wag', '$.name');
Hasil:
+------------------------------------------------+ | JSON_CONTAINS(@json_document, 'Wag', '$.name') | +------------------------------------------------+ | NULL | +------------------------------------------------+ 1 row in set, 1 warning (0.000 sec)
Dan mari kita periksa peringatannya:
SHOW WARNINGS;
Hasil:
+---------+------+-----------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+-----------------------------------------------------------------------------------+ | Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 | +---------+------+-----------------------------------------------------------------------------------+
Struktur Bersarang
Berikut adalah contoh yang mencari nilai dalam dokumen bersarang:
SET @json_document = '{ "name": "Wag", "specs": { "weight": 10, "height": 30 } }';
SELECT JSON_CONTAINS(@json_document, 30, '$.specs.height');
Hasil:
+-----------------------------------------------------+ | JSON_CONTAINS(@json_document, 30, '$.specs.height') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
Argumen Null
Jika salah satu argumennya adalah NULL
, hasilnya adalah NULL
:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS(null, 10, '$.weight') AS a,
JSON_CONTAINS(@json_document, null, '$.weight') AS b,
JSON_CONTAINS(@json_document, 10, null) AS c;
Hasil:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Jumlah Parameter Salah
Tidak memberikan argumen akan menyebabkan kesalahan:
SELECT JSON_CONTAINS();
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'
Sama halnya jika Anda memberikan terlalu banyak argumen:
SELECT JSON_CONTAINS('{ "a": 1}', 1, 2, 3);
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'