V MySQL je to JSON_CONTAINS()
function testuje, zda je zadaná hodnota nalezena v daném dokumentu JSON nebo volitelně na zadané cestě v dokumentu.
Pokud je hodnota nalezena, JSON_CONTAINS()
vrátí 1
, jinak vrátí 0
.
Syntaxe
Syntaxe vypadá takto:
JSON_CONTAINS(target, candidate[, path])
Funkce vrátí 1
nebo 0
podle toho, zda daný candidate
Dokument JSON je obsažen v target
Dokument JSON nebo – pokud path
argument byl dodán – zda je kandidát nalezen na konkrétní cestě v rámci cíle.
Příklad 1 – Dva argumenty
Zde je příklad demonstrující základní použití bez zadání cesty (tj. poskytnutí pouze dvou argumentů).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
Všimněte si složených závorek kolem druhého argumentu. Ty jsou vyžadovány, aby byl JSON platný. Pokud vynecháme složené závorky, skončíme s chybou:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Výsledek:
ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.
Příklad 2 – Tři argumenty
V tomto příkladu přidám třetí argument, abych označil konkrétní cestu, pro kterou se má najít druhý argument v prvním argumentu.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+
V tomto případě byl druhý argument nalezen v prvním argumentu na cestě určené třetím argumentem.
Pokud by nebyl nalezen, skončili bychom s tímto:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 0 | +--------+
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 @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Výsledek:
+--------+ | Result | +--------+ | 1 | +--------+