V MariaDB, JSON_CONTAINS_PATH() je vestavěná funkce, která označuje, zda daný dokument JSON obsahuje data na zadané cestě nebo cestách.
Vrací 1 pokud dokument obsahuje data na zadané cestě/s, 0 pokud tomu tak není, a NULL pokud je některý z argumentů NULL .
Syntaxe
Syntaxe vypadá takto:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Kde json_doc je dokument JSON a path určuje cestu, pro kterou se mají najít data. Lze poskytnout více cest.
return_arg argument určuje, jak se vypořádat s více cestami. Může to být one nebo all .
one– Funkce vrací1pokud v dokumentu JSON existuje alespoň jedna cesta.all– Funkce vrací1pouze v případě, že v dokumentu JSON existují všechny cesty.
Příklad
Zde je příklad k demonstraci.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name'); Výsledek:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.name') | +-----------------------------------------------------+ | 1 | +-----------------------------------------------------+
V tomto případě cesta existuje a výsledek je 1 .
V dalším příkladu cesta neexistuje a výsledek je 0 :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type'); Výsledek:
+-----------------------------------------------------+ | JSON_CONTAINS_PATH(@json_document, 'one', '$.type') | +-----------------------------------------------------+ | 0 | +-----------------------------------------------------+
Více cest
Zde je několik příkladů hledání více cest v dokumentu:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
V tomto příkladu jsme hledali dvě cesty. Jedna cesta existuje a druhá ne. Ale máme 1 každopádně (pozitivní výsledek). Je to proto, že jsme použili one jako druhý argument. one určuje, že dostaneme 1 pokud některá z cest existuje.
Co se stane, když použijeme all jako druhý argument:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Tentokrát je výsledek 0 , protože ne všechny cesty existují v dokumentu JSON.
Pokud změníme chybějící cestu ($.type ) k jednomu, který existuje, dostaneme jiný výsledek:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Pole
Zde je příklad, který testuje, zda daný index existuje v poli:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
A co se stane, když zvýšíme index na neexistující:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Vnořené struktury
Zde je příklad, který hledá cestu v rámci vnořeného dokumentu:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result; Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Nulové argumenty
Pokud je některý argument NULL , výsledkem je NULL :
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c; Výsledek:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Nesprávný počet parametrů
Pokud neposkytnete žádné argumenty, dojde k chybě:
SELECT JSON_CONTAINS_PATH(); Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'
Totéž se stane, když neprodáte dostatek argumentů:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document); Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'