В 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“