I SQLite er json_array_length()
funktion returnerer antallet af elementer i et givet JSON-array.
Arrayet er angivet som et argument. Hvis arrayet er indlejret i et større JSON-dokument, kan vi bruge et valgfrit andet argument til at angive stien til arrayet.
Hvis værdien ikke er et array, returnerer funktionen 0
.
Syntaks
Funktionen kan bruges på følgende to måder:
json_array_length(X)
json_array_length(X,P)
Hvor X
repræsenterer arrayet og P
er en valgfri sti, der kan bruges til at angive stien til arrayet i et større dokument.
Eksempel
Her er et grundlæggende eksempel for at demonstrere:
SELECT json_array_length('[ 7, 12, 10 ]');
Resultat:
3
Arrayet indeholder tre elementer og så 3
er returneret.
Angiv en sti
Vi kan også bruge et andet argument for at angive stien til arrayet:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Resultat:
3
I dette tilfælde er arrayet på det øverste niveau, så vi sender $
som stien.
Følgende eksempel bruger en matrix, der er indlejret i et større dokument:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Resultat:
3
I dette tilfælde er arrayet ved dogs
indeholder tre elementer.
Vi kan navigere ned til næste niveau og finde antallet af elementer i et af de andre arrays:
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'
);
Resultat:
4
Arrays er nul-baserede, og derfor starter optællingen ved 0
. Derfor specificerede vi [1]
for at få det andet element i dogs
array, som tilfældigvis er et JSON-objekt. Vi bruger derefter .scores
for at vælge dens array.
Valg af ikke-arrays
Hvis stien peger på en anden værdi end et JSON-array, 0
returneres:
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'
);
Resultat:
0
Valg af en ikke-eksisterende sti
Hvis det andet argument peger på en sti, der ikke eksisterer, null
er returneret.
Lad os først indstille .nullvalue
til NULL
:
.nullvalue NULL
.nullvalue
dot-kommandoen giver os mulighed for at angive en streng, der vil blive brugt til at erstatte null-værdier. Det er en af flere måder, du kan erstatte null-værdier med en streng i SQLite. I dette tilfælde indstiller jeg den til NULL
. Nu vil alle null-værdier returnere NULL
i stedet for et tomt resultat.
Lad os nu kalde json_array_length()
, men brug et andet argument, der peger på en ikke-eksisterende sti:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Resultat:
NULL
Ugyldige stier
Vi får en fejl, hvis vores vej ikke er veludformet:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Resultat:
Runtime error: JSON path error near 'dogs'
I dette tilfælde glemte jeg at inkludere $.
forrest på stien.
Ugyldige JSON-dokumenter
Vi får også en fejl, JSON er ikke veludformet:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Resultat:
Runtime error: malformed JSON
Denne gang fortæller fejlen os, at vores JSON er forkert udformet.