In MariaDB JSON_CONTAINS_PATH()
ist eine integrierte Funktion, die angibt, ob ein bestimmtes JSON-Dokument Daten im angegebenen Pfad oder in den angegebenen Pfaden enthält.
Es gibt 1
zurück wenn das Dokument Daten in den angegebenen Pfaden enthält, 0
wenn nicht, und NULL
wenn eines der Argumente NULL
ist .
Syntax
Die Syntax lautet wie folgt:
JSON_CONTAINS_PATH(json_doc, return_arg, path[, path] ...)
Wobei json_doc
ist das JSON-Dokument und path
gibt den Pfad an, für den Daten gesucht werden sollen. Es können mehrere Pfade angegeben werden.
Das return_arg
Argument bestimmt, wie mit mehreren Pfaden umgegangen wird. Es kann one
sein oder all
.
one
– Die Funktion gibt1
zurück wenn mindestens ein Pfad innerhalb des JSON-Dokuments existiert.all
– Die Funktion gibt1
zurück nur wenn alle Pfade im JSON-Dokument vorhanden sind.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');
Ergebnis:
In diesem Fall existiert der Pfad und das Ergebnis ist 1
.
Im nächsten Beispiel existiert der Pfad nicht und das Ergebnis ist 0
:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');
Ergebnis:
Mehrere Pfade
Hier sind einige Beispiele, die nach mehreren Pfaden innerhalb des Dokuments suchen:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.type',
'$.weight'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+
In diesem Beispiel haben wir nach zwei Pfaden gesucht. Der eine Weg existiert und der andere nicht. Aber wir haben eine 1
trotzdem (ein positives Ergebnis). Das liegt daran, dass wir one
verwendet haben als zweites Argument. Der one
gibt an, dass wir eine 1
erhalten falls einer der Pfade existiert.
Folgendes passiert, wenn wir all
verwenden als zweites Argument:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.type',
'$.weight'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 0 |+--------+
Diesmal ist das Ergebnis 0
, da nicht alle Pfade im JSON-Dokument vorhanden sind.
Wenn wir den fehlenden Pfad ändern ($.type
) zu einem vorhandenen, erhalten wir ein anderes Ergebnis:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(
@json_document,
'all',
'$.name',
'$.weight'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+
Arrays
Hier ist ein Beispiel, das testet, ob ein bestimmter Index in einem Array vorhanden ist:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[2]'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+
Und Folgendes passiert, wenn wir den Index auf einen nicht vorhandenen erhöhen:
SET @json_document = '
{
"name": "Wag",
"awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ]
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.awards[3]'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 0 |+--------+
Verschachtelte Strukturen
Hier ist ein Beispiel, das nach einem Pfad in einem verschachtelten Dokument sucht:
SET @json_document = '
{
"name": "Wag",
"specs": {
"weight": 10,
"height": 30
}
}
';
SELECT JSON_CONTAINS_PATH(
@json_document,
'one',
'$.specs.height'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+
Null-Argumente
Wenn irgendein Argument NULL
ist , ist das Ergebnis NULL
:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT
JSON_CONTAINS_PATH(null, 'one', '$.weight') AS a,
JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
JSON_CONTAINS_PATH(@json_document, 'one', null) AS c;
Ergebnis:
+------+------+------+| ein | b | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+
Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_CONTAINS_PATH();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS_PATH“
Dasselbe passiert, wenn Sie nicht genügend Argumente übergeben:
SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT JSON_CONTAINS_PATH(@json_document);
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_CONTAINS_PATH“