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ý.