V MySQL je to JSON_CONTAINS_PATH()
function testuje, zda je v daném dokumentu JSON nalezena zadaná cesta.
Pokud je cesta nalezena, JSON_CONTAINS_PATH()
vrátí 1
, jinak vrátí 0
.
Syntaxe
Syntaxe vypadá takto:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Kde json_doc
je dokument JSON, one_or_all
je klíčové slovo one
nebo all
(pro označení, zda musí existovat pouze jedna cesta, nebo musí existovat všechny cesty, než se vrátí 1
) a path
je skutečná cesta.
Příklad 1 – Základní použití
Zde je příklad demonstrující základní použití.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Cesta $.a
existuje v dokumentu JSON, a proto je výsledek 1
. Použili jsme one
jako druhý argument, ale v tomto případě bychom dostali stejný výsledek, kdybychom zadali all
.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Pokud zadáme cestu, která neexistuje, dostaneme 0
. Příklad:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Příklad 2 – Více cest
V následujících příkladech specifikujeme dvě cesty.
V prvním příkladu jedna cesta existuje, ale druhá ne. Ale protože používám one
jako druhý argument je výsledek kladný (protože alespoň jedna z cest existuje).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Pokud přepneme one
na all
dostaneme negativní výsledek.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
Je to proto, že all
Klíčové slovo vyžaduje, aby v dokumentu JSON existovaly všechny cesty, než vrátí 1
.
Příklad 3 – Tečkový zápis
K označení konkrétních cest v dokumentu JSON můžete použít tečkovou notaci.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Příklad 4 – Pole
Zde je několik příkladů pole.
První příklad vrátí kladný výsledek.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Další příklad vrátí záporný výsledek.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
To vrátí zápornou hodnotu, protože pole používají číslování založené na nule. Proto cesta $.c[3]
představuje čtvrtý prvek, ale pole obsahuje pouze tři prvky.