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“