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í1
pokud v dokumentu JSON existuje alespoň jedna cesta.all
– Funkce vrací1
pouze 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'