В MariaDB, JSON_EXISTS()
е вградена функция, която ви позволява да проверите дали съществува стойност на определен път в JSON документа.
Той приема документа JSON като аргумент и връща 1
ако пътят е намерен, и 0
ако не е.
Документацията на MariaDB посочва, че функцията „определя дали в дадените данни съществува определена стойност на JSON“. Изглежда обаче, че функцията всъщност не проверява за дадена стойност. Вероятно е по-точно да се каже, че определя дали е определен път съществува или че на посочения път съществува стойност.
За проверка дали действителната стойност съществува, можете да използвате JSON_CONTAINS()
функция.
Синтаксис
Синтаксисът е така:
JSON_EXISTS(json_doc, path)
Където json_doc
е JSON документът и path
е пътят за намиране.
Пример
Ето пример за демонстрация.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Резултат:
+----------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+---------------------------- ----------------+| 1 |+----------------------------------------------+предварително>В този случай пътят е намерен и резултатът е
1
.Ако пътят не е намерен, резултатът е
0
, като това:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Резултат:
+----------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+---------------------------- ----------------+| 0 |+----------------------------------------------+предварително>Масиви
В този пример проверявам за съществуването на елемент в даден индекс на масив:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Резултат:
+--------+| Резултат |+--------+| 1 |+-------+Ето какво се случва, ако индексът не съществува в масива:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Резултат:
+--------+| Резултат |+--------+| 0 |+-------+По-голям JSON документ
Ето пример, който използва малко по-голям JSON документ. Тук проверявам за ключ, който съществува в рамките на няколко нива на влагане:
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;
Резултат:
+--------+| Резултат |+--------+| 1 |+-------+Нулеви аргументи
Ако някой от аргументите е
NULL
, резултатът еNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Резултат:
+--------------------+------------------- --------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- -------------------------+| NULL | NULL |+---------------------+-------------------- ------------+Невалиден JSON
Предаването на невалиден JSON води до
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Резултат:
+---------------------+| JSON_EXISTS('{1}', '$.a') |+---------------------------+| NULL |+----------------------+Неправилен брой параметри
Предоставянето на без аргументи води до грешка:
SELECT JSON_EXISTS();
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_EXISTS“Същото е, когато предоставите твърде много аргументи:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой параметри в извикването на естествена функция „JSON_EXISTS“