In SQLite is de json_array_length()
functie retourneert het aantal elementen in een gegeven JSON-array.
De array wordt geleverd als argument. Als de array is ingesloten in een groter JSON-document, kunnen we een optioneel tweede argument gebruiken om het pad naar de array op te geven.
Als de waarde geen array is, retourneert de functie 0
.
Syntaxis
De functie kan op de volgende twee manieren worden gebruikt:
json_array_length(X)
json_array_length(X,P)
Waar X
staat voor de array en P
is een optioneel pad dat kan worden gebruikt om het pad naar de array in een groter document te specificeren.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren:
SELECT json_array_length('[ 7, 12, 10 ]');
Resultaat:
3
De array bevat drie elementen en dus 3
wordt geretourneerd.
Geef een pad op
We kunnen ook een tweede argument gebruiken om het pad naar de array te specificeren:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Resultaat:
3
In dit geval bevindt de array zich op het hoogste niveau, en dus passeren we $
als het pad.
In het volgende voorbeeld wordt een array gebruikt die is ingesloten in een groter document:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Resultaat:
3
In dit geval is de array op dogs
bevat drie elementen.
We kunnen naar het volgende niveau navigeren en het aantal elementen in een van de andere arrays vinden:
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'
);
Resultaat:
4
Arrays zijn gebaseerd op nul, en dus begint de telling bij 0
. Daarom hebben we [1]
. gespecificeerd om het tweede element binnen de dogs
te krijgen array, wat toevallig een JSON-object is. We gebruiken dan .scores
om zijn array te selecteren.
Niet-arrays selecteren
Als het pad naar een andere waarde dan een JSON-array verwijst, 0
wordt geretourneerd:
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'
);
Resultaat:
0
Een niet-bestaand pad selecteren
Als het tweede argument verwijst naar een pad dat niet bestaat, null
wordt geretourneerd.
Laten we eerst .nullvalue
. instellen naar NULL
:
.nullvalue NULL
De .nullvalue
dot-opdracht stelt ons in staat om een tekenreeks op te geven die zal worden gebruikt om null-waarden te vervangen. Het is een van de vele manieren waarop u null-waarden kunt vervangen door een tekenreeks in SQLite. In dit geval heb ik het ingesteld op NULL
. Nu, alle null-waarden retourneren NULL
in plaats van een leeg resultaat.
Laten we nu json_array_length()
. aanroepen , maar gebruik een tweede argument dat verwijst naar een niet-bestaand pad:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Resultaat:
NULL
Ongeldige paden
We krijgen een foutmelding als ons pad niet goed is gevormd:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Resultaat:
Runtime error: JSON path error near 'dogs'
In dit geval ben ik vergeten $.
aan de voorkant van het pad.
Ongeldige JSON-documenten
We krijgen ook een foutmelding dat de JSON niet goed is gevormd:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Resultaat:
Runtime error: malformed JSON
Deze keer vertelt de fout ons dat onze JSON een verkeerde indeling heeft.