In MySQL der JSON_CONTAINS_PATH()
Funktion testet, ob ein angegebener Pfad im angegebenen JSON-Dokument gefunden wird.
Wenn der Pfad gefunden wird, JSON_CONTAINS_PATH()
gibt 1
zurück , andernfalls wird 0
zurückgegeben .
Syntax
Die Syntax lautet wie folgt:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)
Wobei json_doc
ist das JSON-Dokument, one_or_all
ist das Schlüsselwort one
oder all
(um anzugeben, ob nur ein Pfad vorhanden sein muss oder alle Pfade vorhanden sein müssen, bevor 1
zurückgegeben wird ) und path
ist der tatsächliche Pfad.
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel, um die grundlegende Verwendung zu demonstrieren.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Der Pfad $.a
existiert im JSON-Dokument, und daher ist das Ergebnis 1
. Wir haben one
verwendet als zweites Argument, aber in diesem Fall würden wir dasselbe Ergebnis erhalten, wenn wir all
angegeben hätten .
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Wenn wir einen Pfad angeben, der nicht existiert, erhalten wir 0
. Beispiel:
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.z') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 0 | +--------+
Beispiel 2 – Mehrere Pfade
In den folgenden Beispielen geben wir zwei Pfade an.
Im ersten Beispiel existiert ein Pfad, der andere jedoch nicht. Sondern weil ich one
verwende als zweites Argument ist das Ergebnis positiv (weil mindestens einer der Pfade existiert).
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'one', '$.a', '$.z') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Wenn wir one
tauschen zu all
wir erhalten ein negatives Ergebnis.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.a', '$.z') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 0 | +--------+
Das liegt daran, dass all
-Schlüsselwort erfordert, dass alle Pfade im JSON-Dokument vorhanden sein müssen, bevor es einen 1
zurückgibt .
Beispiel 3 – Punktnotation
Sie können die Punktnotation verwenden, um bestimmte Pfade innerhalb des JSON-Dokuments anzugeben.
SET @doc = '{"a": 1, "b": 2, "c": {"d": 3}}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c.d') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Beispiel 4 – Arrays
Hier sind ein paar Array-Beispiele.
Das erste Beispiel gibt ein positives Ergebnis zurück.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[0]') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 1 | +--------+
Das nächste Beispiel gibt ein negatives Ergebnis zurück.
SET @doc = '{"a": 1, "b": 2, "c": [3, 4, 5]}'; SELECT JSON_CONTAINS_PATH(@doc, 'all', '$.c[3]') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | 0 | +--------+
Dies gibt negativ zurück, da Arrays eine nullbasierte Nummerierung verwenden. Daher ist der Pfad $.c[3]
stellt das vierte Element dar, aber das Array enthält nur drei Elemente.