V MariaDB, JSON_EXISTS()
je vestavěná funkce, která vám umožňuje zkontrolovat, zda na zadané cestě v dokumentu JSON existuje hodnota.
Přijme dokument JSON jako argument a vrátí 1
pokud je cesta nalezena, a 0
pokud není.
Dokumentace MariaDB uvádí, že funkce „určuje, zda v daných datech existuje zadaná hodnota JSON“. Zdá se však, že funkce ve skutečnosti nekontroluje danou hodnotu. Pravděpodobně je přesnější říci, že určuje, zda je zadaná cesta existuje nebo že na zadané cestě existuje hodnota.
Pro kontrolu, zda je skutečná hodnota existuje, můžete použít JSON_CONTAINS()
funkce.
Syntaxe
Syntaxe vypadá takto:
JSON_EXISTS(json_doc, path)
Kde json_doc
je dokument JSON a path
je cesta k nalezení.
Příklad
Zde je příklad k demonstraci.
SELECT JSON_EXISTS('{ "name": "Wag" }', '$.name');
Výsledek:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.name') |+---------------------------- -----------------+| 1 |+--------------------------------------------+V tomto případě je cesta nalezena a výsledek je
1
.Pokud cesta není nalezena, výsledek je
0
, takto:SELECT JSON_EXISTS('{ "name": "Wag" }', '$.type');
Výsledek:
+--------------------------------------------+| JSON_EXISTS('{ "name":"Wag" }', '$.type') |+---------------------------- -----------------+| 0 |+--------------------------------------------+Pole
V tomto příkladu zkontroluji existenci prvku na daném indexu pole:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', "$.scores[2]" ) AS Result;
Výsledek:
+---------+| Výsledek |+--------+| 1 |+--------+Co se stane, pokud index v poli neexistuje:
SELECT JSON_EXISTS( '{ "name": "Wag", "scores": [ 10, 8, 7 ] }', '$.scores[3]' ) AS Result;
Výsledek:
+---------+| Výsledek |+--------+| 0 |+--------+Větší dokument JSON
Zde je příklad, který používá o něco větší dokument JSON. Zde zkontroluji klíč, který existuje v několika úrovních vnoření:
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;
Výsledek:
+---------+| Výsledek |+--------+| 1 |+--------+Nulové argumenty
Pokud je některý z argumentů
NULL
, výsledkem jeNULL
:SELECT JSON_EXISTS(null, '$.a'), JSON_EXISTS('{ "a": 1 }', null);
Výsledek:
+--------------------------+------------------- ---------------+| JSON_EXISTS(null, '$.a') | JSON_EXISTS('{ "a":1 }', null) |+--------------------------+------- --------------------------+| NULL | NULL |+--------------------------+-------------------- -------------+Neplatný JSON
Předání neplatného JSON má za následek
NULL
:SELECT JSON_EXISTS('{1}', '$.a');
Výsledek:
+---------------------------+| JSON_EXISTS('{1}', '$.a') |+---------------------------+| NULL |+---------------------------+Nesprávný počet parametrů
Pokud neposkytnete žádné argumenty, dojde k chybě:
SELECT JSON_EXISTS();
Výsledek:
CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'JSON_EXISTS'Je to stejné, když uvedete příliš mnoho argumentů:
SELECT JSON_EXISTS('{"a": 1}', '$.a', 3);
Výsledek:
CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'JSON_EXISTS'