In MySQL is de JSON_CONTAINS_PATH()
functie test of een gespecificeerd pad wordt gevonden in het gegeven JSON-document.
Als het pad is gevonden, JSON_CONTAINS_PATH()
retourneert 1
, anders retourneert het 0
.
Syntaxis
De syntaxis gaat als volgt:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Waar json_doc
is het JSON-document, one_or_all
is het sleutelwoord one
of all
(om aan te geven of er slechts één pad hoeft te bestaan of dat alle paden moeten bestaan voordat 1
wordt geretourneerd ), en path
is het eigenlijke pad.
Voorbeeld 1 – Basisgebruik
Hier is een voorbeeld om het basisgebruik te demonstreren.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Het pad $.a
bestaat in het JSON-document en daarom is het resultaat 1
. We gebruikten one
als het tweede argument, maar in dit geval zouden we hetzelfde resultaat krijgen als we all
hadden opgegeven .
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Als we een pad specificeren dat niet bestaat, krijgen we 0
. Voorbeeld:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Voorbeeld 2 – Meerdere paden
In de volgende voorbeelden specificeren we twee paden.
In het eerste voorbeeld bestaat het ene pad, maar het andere niet. Maar omdat ik one
. gebruik als het tweede argument is het resultaat positief (omdat ten minste één van de paden bestaat).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Als we one
verwisselen naar all
we krijgen een negatief resultaat.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Dit komt omdat de all
trefwoord vereist dat alle paden in het JSON-document moeten bestaan voordat het een 1
. retourneert .
Voorbeeld 3 – Puntnotatie
U kunt puntnotatie gebruiken om specifieke paden in het JSON-document aan te geven.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Voorbeeld 4 – Arrays
Hier zijn een paar voorbeelden van arrays.
Het eerste voorbeeld levert een positief resultaat op.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 1 | +--------+
Het volgende voorbeeld geeft een negatief resultaat.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Resultaat:
+--------+ | Result | +--------+ | 0 | +--------+
Dit retourneert negatief omdat arrays op nul gebaseerde nummering gebruiken. Daarom is het pad $.c[3]
vertegenwoordigt het vierde element, maar de array bevat slechts drie elementen.