В MySQL, JSON_CONTAINS_PATH() функцията тества дали е намерен определен път в дадения JSON документ.
Ако пътят е намерен, JSON_CONTAINS_PATH() връща 1 , в противен случай връща 0 .
Синтаксис
Синтаксисът е така:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Където json_doc е JSON документът, one_or_all е ключовата дума one или all (за да посочите дали трябва да съществува само един път или всички пътища трябва да съществуват, преди да върне 1 ) и path е действителният път.
Пример 1 – Основна употреба
Ето пример за демонстриране на основна употреба.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Пътят $.a съществува в документа JSON и следователно резултатът е 1 . Използвахме one като втория аргумент, но в този случай ще получим същия резултат, ако посочим all .
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Ако посочим път, който не съществува, получаваме 0 . Пример:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Резултат:
+--------+ | Result | +--------+ | 0 | +--------+
Пример 2 – Множество пътища
В следващите примери указваме два пътя.
В първия пример единият път съществува, но другият не. Но тъй като използвам one като втори аргумент, резултатът е положителен (тъй като съществува поне един от пътищата).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Ако превключим one до all получаваме отрицателен резултат.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Резултат:
+--------+ | Result | +--------+ | 0 | +--------+
Това е така, защото all ключова дума изисква всички пътища да съществуват в JSON документа, преди да върне 1 .
Пример 3 – Точкова нотация
Можете да използвате нотация с точки, за да посочите конкретни пътища в JSON документа.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Пример 4 – Масиви
Ето няколко примера за масиви.
Първият пример връща положителен резултат.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Резултат:
+--------+ | Result | +--------+ | 1 | +--------+
Следващият пример връща отрицателен резултат.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}';
SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Резултат:
+--------+ | Result | +--------+ | 0 | +--------+
Това връща отрицателно, тъй като масивите използват номериране на базата на нула. Следователно пътят $.c[3] представлява четвъртия елемент, но масивът съдържа само три елемента.