В MySQL, JSON_CONTAINS()
функцията тества дали определена стойност е намерена или не в дадения JSON документ или, по избор, на посочения път в документа.
Ако стойността е намерена, JSON_CONTAINS()
връща 1
, в противен случай връща 0
.
Синтаксис
Синтаксисът е така:
JSON_CONTAINS(target, candidate[, path])
Функцията връща 1
или 0
в зависимост от това дали даден candidate
JSON документът се съдържа в target
JSON документ или—ако path
беше предоставен аргумент — дали кандидатът е намерен на определен път в рамките на целта.
Пример 1 – Два аргумента
Ето пример за демонстриране на основно използване, без да указвате път (т.е. предоставяне само на два аргумента).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Обърнете внимание на къдравите скоби около втория аргумент. Те са необходими, за да стане валиден JSON. Ако пропуснем фигурните скоби, ще получим грешка:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Резултат:
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.
Пример 2 – Три аргумента
В този пример добавям трети аргумент, за да посоча конкретен път, за който да намеря втория аргумент в първия аргумент.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
В този случай вторият аргумент е намерен в първия аргумент по пътя, посочен от третия аргумент.
Ако не беше намерен, щяхме да свършим с това:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Резултат:
+--------+ | Result | +--------+ | 0 | +--------+
Пример 3 – Точкова нотация
Можете да използвате нотация с точки, за да посочите конкретни пътища в JSON документа.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+