В 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]
представлява четвъртия елемент, но масивът съдържа само три елемента.