SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite JSON_ARRAY_LENGTH()

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.