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'