I MySQL er JSON_CONTAINS()
funktion tester, om der findes en specificeret værdi i det givne JSON-dokument eller, valgfrit, ved den angivne sti i dokumentet.
Hvis værdien findes, JSON_CONTAINS()
returnerer 1
, ellers returnerer den 0
.
Syntaks
Syntaksen ser sådan ud:
JSON_CONTAINS(target, candidate[, path])
Funktionen returnerer 1
eller 0
afhængig af om en given candidate
JSON-dokument er indeholdt i et target
JSON-dokument, eller - hvis en path
argument blev leveret - om kandidaten er fundet på en specifik vej inden for målet.
Eksempel 1 – To argumenter
Her er et eksempel til at demonstrere grundlæggende brug uden at angive en sti (dvs. kun at give to argumenter).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
Bemærk de krøllede parenteser omkring det andet argument. Disse er nødvendige for at gøre det gyldigt JSON. Hvis vi udelader de krøllede seler, ender vi med en fejl:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultat:
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.
Eksempel 2 – Tre argumenter
I dette eksempel tilføjer jeg et tredje argument for at angive en specifik sti, som det andet argument skal findes i det første argument for.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+
I dette tilfælde blev det andet argument fundet i det første argument på stien angivet af det tredje argument.
Hvis det ikke blev fundet, ville vi ende med dette:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultat:
+--------+ | Result | +--------+ | 0 | +--------+
Eksempel 3 – Punktnotation
Du kan bruge punktnotation til at angive specifikke stier i JSON-dokumentet.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Resultat:
+--------+ | Result | +--------+ | 1 | +--------+