I SQLite, json_array_length()
funktion returnerar antalet element i en given JSON-array.
Arrayen tillhandahålls som ett argument. Om arrayen är inbäddad i ett större JSON-dokument kan vi använda ett valfritt andra argument för att ange sökvägen till arrayen.
Om värdet inte är en matris returnerar funktionen 0
.
Syntax
Funktionen kan användas på följande två sätt:
json_array_length(X)
json_array_length(X,P)
Där X
representerar arrayen och P
är en valfri sökväg som kan användas för att ange sökvägen till arrayen i ett större dokument.
Exempel
Här är ett grundläggande exempel att visa:
SELECT json_array_length('[ 7, 12, 10 ]');
Resultat:
3
Arrayen innehåller tre element och så 3
returneras.
Ange en sökväg
Vi kan också använda ett andra argument för att specificera sökvägen till arrayen:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Resultat:
3
I det här fallet är arrayen på toppnivån, så vi skickar $
som vägen.
Följande exempel använder en array som är inbäddad i ett 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 det här fallet, arrayen vid dogs
innehåller tre element.
Vi kan navigera ner till nästa nivå och hitta antalet element i en av de andra arrayerna:
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
Matriser är nollbaserade, så räkningen börjar vid 0
. Därför angav vi [1]
för att få det andra elementet inom dogs
array, som råkar vara ett JSON-objekt. Vi använder sedan .scores
för att välja dess array.
Välja icke-matriser
Om sökvägen pekar på ett annat värde än en JSON-array, 0
returneras:
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
Välja en icke-existerande sökväg
Om det andra argumentet pekar på en sökväg som inte finns, null
returneras.
Låt oss först ställa in .nullvalue
till NULL
:
.nullvalue NULL
.nullvalue
dot-kommandot låter oss tillhandahålla en sträng som kommer att användas för att ersätta null-värden. Det är ett av flera sätt du kan ersätta null-värden med en sträng i SQLite. I det här fallet ställer jag in den till NULL
. Nu kommer alla nollvärden att returnera NULL
istället för ett tomt resultat.
Låt oss nu anropa json_array_length()
, men använd ett andra argument som pekar på en icke-existerande sökväg:
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
Ogiltiga sökvägar
Vi får ett felmeddelande om vår väg inte är väl utformad:
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 det här fallet glömde jag att inkludera $.
längst fram på stigen.
Ogiltiga JSON-dokument
Vi får också ett felmeddelande om att JSON inte är välformaterad:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Resultat:
Runtime error: malformed JSON
Den här gången berättar felet att vår JSON är felaktig.