W SQLite json_array_length()
funkcja zwraca liczbę elementów w danej tablicy JSON.
Tablica jest dostarczana jako argument. Jeśli tablica jest osadzona w większym dokumencie JSON, możemy użyć opcjonalnego drugiego argumentu, aby określić ścieżkę do tablicy.
Jeśli wartość nie jest tablicą, funkcja zwraca 0
.
Składnia
Funkcji można używać na dwa sposoby:
json_array_length(X)
json_array_length(X,P)
Gdzie X
reprezentuje tablicę i P
to opcjonalna ścieżka, której można użyć do określenia ścieżki do tablicy w większym dokumencie.
Przykład
Oto podstawowy przykład do zademonstrowania:
SELECT json_array_length('[ 7, 12, 10 ]');
Wynik:
3
Tablica zawiera trzy elementy, a więc 3
jest zwracany.
Określ ścieżkę
Możemy również użyć drugiego argumentu, aby określić ścieżkę do tablicy:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Wynik:
3
W tym przypadku tablica jest na najwyższym poziomie, więc przekazujemy $
jako ścieżka.
W poniższym przykładzie użyto tablicy osadzonej w większym dokumencie:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Wynik:
3
W tym przypadku tablica w dogs
zawiera trzy elementy.
Możemy przejść do następnego poziomu i znaleźć liczbę elementów w jednej z pozostałych tablic:
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'
);
Wynik:
4
Tablice są oparte na zerach, więc licznik zaczyna się od 0
. Dlatego określiliśmy [1]
aby uzyskać drugi element w dogs
tablica, która jest obiektem JSON. Następnie używamy .scores
aby wybrać jego tablicę.
Wybieranie nie-tablic
Jeśli ścieżka wskazuje na wartość inną niż tablica JSON, 0
jest zwracany:
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'
);
Wynik:
0
Wybieranie nieistniejącej ścieżki
Jeśli drugi argument wskazuje na ścieżkę, która nie istnieje, null
jest zwracany.
Najpierw ustawmy .nullvalue
na NULL
:
.nullvalue NULL
.nullvalue
Polecenie kropka pozwala nam dostarczyć ciąg znaków, który zostanie użyty do zastąpienia wartości null. Jest to jeden z kilku sposobów zastępowania wartości null ciągiem w SQLite. W tym przypadku ustawiłem go na NULL
. Teraz wszystkie wartości null zwrócą NULL
zamiast pustego wyniku.
Teraz wywołajmy json_array_length()
, ale użyj drugiego argumentu, który wskazuje na nieistniejącą ścieżkę:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Wynik:
NULL
Nieprawidłowe ścieżki
Otrzymamy błąd, jeśli nasza ścieżka nie jest dobrze uformowana:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Wynik:
Runtime error: JSON path error near 'dogs'
W tym przypadku zapomniałem dołączyć $.
z przodu ścieżki.
Nieprawidłowe dokumenty JSON
Otrzymamy również błąd, że JSON nie jest poprawnie sformułowany:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Wynik:
Runtime error: malformed JSON
Tym razem błąd mówi nam, że nasz JSON jest zniekształcony.