In MySQL is de JSON_CONTAINS()
functie test of een opgegeven waarde al dan niet wordt gevonden in het gegeven JSON-document of, optioneel, op het opgegeven pad in het document.
Als de waarde wordt gevonden, JSON_CONTAINS()
retourneert 1
, anders retourneert het 0
.
Syntaxis
De syntaxis gaat als volgt:
JSON_CONTAINS(target, candidate[, path])
De functie retourneert 1
of 0
afhankelijk van of een bepaalde candidate
JSON-document is opgenomen in een target
JSON-document, of—als een path
argument is opgegeven:of de kandidaat op een specifiek pad binnen het doel wordt gevonden.
Voorbeeld 1 – Twee argumenten
Hier is een voorbeeld om het basisgebruik te demonstreren zonder een pad op te geven (d.w.z. door slechts twee argumenten op te geven).
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '{"c": {"d": 3}}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Let op de accolades rond het tweede argument. Deze zijn vereist om het een geldige JSON te maken. Als we de accolades weglaten, krijgen we een foutmelding:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '"c": {"d": 3}'; SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;
Resultaat:
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.
Voorbeeld 2 – Drie argumenten
In dit voorbeeld voeg ik een derde argument toe om een specifiek pad aan te geven waarnaar het tweede argument in het eerste argument moet worden gevonden.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '1'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
In dit geval werd het tweede argument gevonden in het eerste argument op het pad gespecificeerd door het derde argument.
Als het niet werd gevonden, zouden we eindigen met dit:
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '2'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Voorbeeld 3 – Puntnotatie
U kunt puntnotatie gebruiken om specifieke paden in het JSON-document aan te geven.
SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}'; SET @doc2 = '3'; SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+