V SQLite, json_array_length()
funkce vrací počet prvků v daném poli JSON.
Pole je poskytováno jako argument. Pokud je pole vloženo do většího dokumentu JSON, můžeme použít volitelný druhý argument k určení cesty k poli.
Pokud hodnota není pole, funkce vrátí 0
.
Syntaxe
Funkci lze použít dvěma následujícími způsoby:
json_array_length(X)
json_array_length(X,P)
Kde X
představuje pole a P
je volitelná cesta, kterou lze použít k určení cesty k poli v rámci většího dokumentu.
Příklad
Zde je základní příklad k demonstraci:
SELECT json_array_length('[ 7, 12, 10 ]');
Výsledek:
3
Pole obsahuje tři prvky, tedy 3
je vráceno.
Zadejte cestu
Můžeme také použít druhý argument, abychom specifikovali cestu k poli:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Výsledek:
3
V tomto případě je pole na nejvyšší úrovni, a tak předáme $
jako cestu.
Následující příklad používá pole, které je vloženo do většího dokumentu:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Výsledek:
3
V tomto případě pole na dogs
obsahuje tři prvky.
Můžeme přejít na další úroveň a najít počet prvků v jednom z dalších polí:
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'
);
Výsledek:
4
Pole jsou založeny na nule, takže počet začíná na 0
. Proto jsme zadali [1]
získat druhý prvek v rámci dogs
pole, což je shodou okolností objekt JSON. Potom použijeme .scores
vyberte jeho pole.
Výběr Non-Arrays
Pokud cesta ukazuje na jinou hodnotu než pole JSON, 0
je vráceno:
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'
);
Výsledek:
0
Výběr neexistující cesty
Pokud druhý argument ukazuje na cestu, která neexistuje, null
je vráceno.
Nejprve nastavíme .nullvalue
na NULL
:
.nullvalue NULL
.nullvalue
Příkaz dot nám umožňuje zadat řetězec, který bude použit k nahrazení hodnot null. Je to jeden z několika způsobů, jak můžete nahradit hodnoty null řetězcem v SQLite. V tomto případě jsem jej nastavil na NULL
. Nyní všechny hodnoty null vrátí NULL
místo prázdného výsledku.
Nyní zavoláme json_array_length()
, ale použijte druhý argument, který ukazuje na neexistující cestu:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Výsledek:
NULL
Neplatné cesty
Pokud naše cesta není správně vytvořena, zobrazí se chyba:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Výsledek:
Runtime error: JSON path error near 'dogs'
V tomto případě jsem zapomněl uvést $.
v přední části cesty.
Neplatné dokumenty JSON
Také se zobrazí chyba, že JSON není správně vytvořen:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Výsledek:
Runtime error: malformed JSON
Tentokrát nám chyba říká, že náš JSON je chybný.