Trong MariaDB, JSON_EXISTS()
là một chức năng tích hợp cho phép bạn kiểm tra xem một giá trị có tồn tại ở một đường dẫn được chỉ định trong tài liệu JSON hay không.
Nó chấp nhận tài liệu JSON làm đối số và trả về 1
nếu đường dẫn được tìm thấy và 0
nếu không.
Tài liệu MariaDB tuyên bố rằng hàm “xác định xem giá trị JSON được chỉ định có tồn tại trong dữ liệu đã cho hay không”. Tuy nhiên, hàm không thực sự xuất hiện để kiểm tra một giá trị nhất định. Có lẽ chính xác hơn khi nói rằng nó xác định xem một đường dẫn được chỉ định tồn tại hoặc một giá trị tồn tại ở đường dẫn được chỉ định.
Để kiểm tra xem giá trị thực tế tồn tại, bạn có thể sử dụng JSON_CONTAINS()
chức năng.
Cú pháp
Cú pháp như sau:
JSON_EXISTS(json_doc, path)
Ở đâu json_doc
là tài liệu JSON và path
là con đường cần tìm.
Ví dụ
Đây là một ví dụ để chứng minh.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Kết quả:
+ -------------------------------------------- + | JSON_EXISTS ('{"name":"Wag"}', '$ .name') | + ---------------------------- ---------------- + | 1 | + -------------------------------------------- +Trong trường hợp này, đường dẫn được tìm thấy và kết quả là
1
.Nếu không tìm thấy đường dẫn, kết quả là
0
, như thế này:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Kết quả:
+ -------------------------------------------- + | JSON_EXISTS ('{"name":"Wag"}', '$ .type') | + ---------------------------- ---------------- + | 0 | + -------------------------------------------- +Mảng
Trong ví dụ này, tôi kiểm tra sự tồn tại của một phần tử tại một chỉ mục nhất định của một mảng:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Kết quả:
+ -------- + | Kết quả | + -------- + | 1 | + -------- +Dưới đây là những gì sẽ xảy ra nếu chỉ mục không tồn tại trong mảng:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Kết quả:
+ -------- + | Kết quả | + -------- + | 0 | + -------- +Tài liệu JSON lớn hơn
Dưới đây là một ví dụ sử dụng tài liệu JSON lớn hơn một chút. Ở đây, tôi kiểm tra một khóa tồn tại trong một số cấp độ lồng nhau:
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;
Kết quả:
+ -------- + | Kết quả | + -------- + | 1 | + -------- +Đối số rỗng
Nếu bất kỳ đối số nào là
NULL
, kết quả làNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Kết quả:
+ -------------------------- + ------------------- -------------- + | JSON_EXISTS (null, '$ .a') | JSON_EXISTS ('{"a":1}', null) | + -------------------------- + ------- -------------------------- + | NULL | NULL | + -------------------------- + -------------------- ------------- +JSON không hợp lệ
Chuyển JSON không hợp lệ dẫn đến
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Kết quả:
+ --------------------------- + | JSON_EXISTS ('{1}', '$ .a') | + --------------------------- + | NULL | + --------------------------- +Đếm tham số không chính xác
Không cung cấp đối số dẫn đến lỗi:
SELECT JSON_EXISTS();
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'JSON_EXISTS'Điều này cũng tương tự khi bạn cung cấp quá nhiều đối số:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'JSON_EXISTS'