In SQLite die json_array_length()
Funktion gibt die Anzahl der Elemente in einem gegebenen JSON-Array zurück.
Das Array wird als Argument bereitgestellt. Wenn das Array in ein größeres JSON-Dokument eingebettet ist, können wir ein optionales zweites Argument verwenden, um den Pfad zum Array anzugeben.
Wenn der Wert kein Array ist, gibt die Funktion 0
zurück .
Syntax
Die Funktion kann auf zwei Arten verwendet werden:
json_array_length(X)
json_array_length(X,P)
Wobei X
repräsentiert das Array und P
ist ein optionaler Pfad, der verwendet werden kann, um den Pfad zum Array innerhalb eines größeren Dokuments anzugeben.
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT json_array_length('[ 7, 12, 10 ]');
Ergebnis:
3
Das Array enthält drei Elemente und somit 3
zurückgegeben wird.
Geben Sie einen Pfad an
Wir können auch ein zweites Argument verwenden, um den Pfad zum Array anzugeben:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Ergebnis:
3
In diesem Fall befindet sich das Array auf der obersten Ebene, also übergeben wir $
als Pfad.
Das folgende Beispiel verwendet ein Array, das in ein größeres Dokument eingebettet ist:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Ergebnis:
3
In diesem Fall das Array bei dogs
enthält drei Elemente.
Wir können zur nächsten Ebene hinunter navigieren und die Anzahl der Elemente in einem der anderen Arrays finden:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].scores'
);
Ergebnis:
4
Arrays sind nullbasiert, daher beginnt die Zählung bei 0
. Daher haben wir [1][code> angegeben um das zweite Element innerhalb der
dogs
zu erhalten array, das zufällig ein JSON-Objekt ist. Wir verwenden dann .scores
um sein Array auszuwählen.
Nicht-Arrays auswählen
Wenn der Pfad auf einen anderen Wert als ein JSON-Array zeigt, 0
wird zurückgegeben:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
Ergebnis:
0
Auswählen eines nicht vorhandenen Pfads
Wenn das zweite Argument auf einen Pfad zeigt, der nicht existiert, null
zurückgegeben wird.
Lassen Sie uns zuerst .nullvalue
festlegen auf NULL
:
.nullvalue NULL
Der .nullvalue
Der dot-Befehl ermöglicht es uns, eine Zeichenfolge bereitzustellen, die zum Ersetzen von Nullwerten verwendet wird. Dies ist eine von mehreren Möglichkeiten, wie Sie Nullwerte in SQLite durch eine Zeichenfolge ersetzen können. In diesem Fall setze ich es auf NULL
. Jetzt geben alle Nullwerte NULL
zurück anstelle eines leeren Ergebnisses.
Rufen wir nun json_array_length()
auf , aber verwenden Sie ein zweites Argument, das auf einen nicht existierenden Pfad zeigt:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Ergebnis:
NULL
Ungültige Pfade
Wir erhalten eine Fehlermeldung, wenn unser Pfad nicht wohlgeformt ist:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Ergebnis:
Runtime error: JSON path error near 'dogs'
In diesem Fall habe ich vergessen, $.
einzufügen am Anfang des Weges.
Ungültige JSON-Dokumente
Außerdem erhalten wir eine Fehlermeldung, dass JSON nicht wohlgeformt ist:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Ergebnis:
Runtime error: malformed JSON
Diesmal sagt uns der Fehler, dass unser JSON fehlerhaft ist.