W MySQL funkcja JSON_CONTAINS() funkcja sprawdza, czy określona wartość znajduje się w danym dokumencie JSON lub, opcjonalnie, w określonej ścieżce w dokumencie.
Jeśli wartość zostanie znaleziona, JSON_CONTAINS() zwraca 1 , w przeciwnym razie zwraca 0 .
Składnia
Składnia wygląda tak:
JSON_CONTAINS(target, candidate[, path])
Funkcja zwraca 1 lub 0 w zależności od tego, czy dany candidate Dokument JSON jest zawarty w target Dokument JSON lub — jeśli path podano argument — czy kandydat znajduje się na określonej ścieżce w miejscu docelowym.
Przykład 1 – Dwa argumenty
Oto przykład pokazujący podstawowe użycie bez określania ścieżki (tj. Podanie tylko dwóch argumentów).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '{"c": {"d": 3}}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
Zwróć uwagę na nawiasy klamrowe wokół drugiego argumentu. Są one wymagane, aby była poprawna w formacie JSON. Jeśli pominiemy nawiasy klamrowe, otrzymamy błąd:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '"c": {"d": 3}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Wynik:
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.
Przykład 2 – Trzy argumenty
W tym przykładzie dodaję trzeci argument, aby wskazać konkretną ścieżkę, dla której należy znaleźć drugi argument w pierwszym argumencie.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '1';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+
W tym przypadku drugi argument został znaleziony w pierwszym argumencie w ścieżce określonej przez trzeci argument.
Gdyby nie został znaleziony, skończylibyśmy tak:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '2';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Wynik:
+--------+ | Result | +--------+ | 0 | +--------+
Przykład 3 – Notacja kropkowa
Możesz użyć notacji kropkowej, aby wskazać określone ścieżki w dokumencie JSON.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '3';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Wynik:
+--------+ | Result | +--------+ | 1 | +--------+