In MariaDB JSON_LENGTH()
ist eine integrierte Funktion, die die Länge eines JSON-Dokuments zurückgibt.
Wenn Sie diese Funktion aufrufen, geben Sie das JSON-Dokument als Argument an. Sie können auch ein Pfadargument angeben, um die Länge eines Werts innerhalb des Dokuments zurückzugeben.
Die Länge wird wie folgt bestimmt:
- Die Länge eines Skalars ist immer 1.
- Bei einem Array die Anzahl der Elemente im Array.
- Bei einem Objekt die Anzahl der Mitglieder im Objekt.
Die Länge von verschachtelten Arrays oder Objekten wird nicht gezählt.
Syntax
Die Syntax sieht so aus:
JSON_LENGTH(json_doc[, path])
Wobei json_doc
ist das JSON-Dokument und path
ist ein optionales Argument, das einen Pfad innerhalb des Dokuments angibt.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"weight": 20
}
';
SELECT JSON_LENGTH(@json_document);
Ergebnis:
+-------------------------------------+| JSON_LENGTH(@json_document) |+--------------------------------------+| 3 |+-------------------------------------+
Pfad angeben
Hier ist ein Beispiel für die Angabe eines Pfads innerhalb des Dokuments:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details');
Ergebnis:
+--------------------------------------------------+| JSON_LENGTH(@json_document, '$.details') |+------------------------------------- -----+| 2 |+--------------------------------------------------+
Wie bereits erwähnt, wird die Länge von verschachtelten Objekten nicht gezählt, sodass wir als Ergebnis 2
erhalten .
Das nächste Beispiel geht eine Ebene tiefer und zählt die Länge der awards
Objekt:
SET @json_document = '
{
"_id" : 1,
"name" : "Wag",
"details" : {
"type" : "Dog",
"awards" : {
"Florida Dog Awards" : "Top Dog",
"New York Marathon" : "Fastest Dog",
"Sumo 2020" : "Biggest Dog"
}
}
}
';
SELECT JSON_LENGTH(@json_document, '$.details.awards');
Ergebnis:
Skalare
Die Länge eines Skalars ist immer 1
:
SELECT JSON_LENGTH(
'{ "a" : 378, "b" : 45 }',
'$.a'
) AS Result;
Ergebnis:
+--------+| Ergebnis |+--------+| 1 |+--------+
Arrays
Wenn das Dokument ein Array ist, JSON_LENGTH()
zählt die Anzahl der Elemente im Array:
SET @json_document = '
{
"name": "Wag",
"type": "Dog",
"scores": [9, 7, 8, 10, 3]
}
';
SELECT JSON_LENGTH(@json_document, '$.scores');
Ergebnis:
+------------------------------------+| JSON_LENGTH(@json_document, '$.scores') |+------------------------------------- ----+| 5 |+------------------------------------+
Nicht vorhandene Pfade
Das Übergeben eines Pfads, der im JSON-Dokument nicht vorhanden ist, führt zu NULL
.
Beispiel:
SET @json_document = '
{
"name": "Wag",
"type": "Dog"
}
';
SELECT JSON_LENGTH(@json_document, '$.oops');
Ergebnis:
+--------------------------+| JSON_LENGTH(@json_document, '$.oops') |+------------------------------------- --+| NULL |+---------------------------------------------------+
Leere Objekte
Wenn das ausgewählte Objekt leer ist, ist das Ergebnis 0
:
SELECT JSON_LENGTH('{}');
Ergebnis:
+-------------------+| JSON_LENGTH('{}') |+------------------------------+| 0 |+------------------------------+
Null-Argumente
Wenn irgendein Argument NULL
ist , ist das Ergebnis NULL
:
SELECT
JSON_LENGTH(null) AS a,
JSON_LENGTH(null, '$.type') AS b,
JSON_LENGTH('{"a":1}', null) AS c;
Ergebnis:
+------+------+------+| ein | b | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+
Falsche Parameteranzahl
Wenn Sie keine Argumente angeben, wird ein Fehler ausgegeben:
SELECT JSON_LENGTH();
Ergebnis:
FEHLER 1582 (42000):Falsche Parameteranzahl im Aufruf der nativen Funktion „JSON_LENGTH“