В SQLite, json_array_length()
функцията връща броя на елементите в даден JSON масив.
Масивът се предоставя като аргумент. Ако масивът е вграден в по-голям JSON документ, можем да използваме незадължителен втори аргумент, за да посочим пътя към масива.
Ако стойността не е масив, функцията връща 0
.
Синтаксис
Функцията може да се използва по следните два начина:
json_array_length(X)
json_array_length(X,P)
Където X
представлява масива и P
е незадължителен път, който може да се използва за определяне на пътя към масива в по-голям документ.
Пример
Ето основен пример за демонстрация:
SELECT json_array_length('[ 7, 12, 10 ]');
Резултат:
3
Масивът съдържа три елемента и така 3
се връща.
Посочете път
Можем също да използваме втори аргумент, за да посочим пътя към масива:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Резултат:
3
В този случай масивът е на най-високо ниво и затова предаваме $
като пътя.
Следният пример използва масив, който е вграден в по-голям документ:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
);
Резултат:
3
В този случай масивът dogs
съдържа три елемента.
Можем да отидем надолу до следващото ниво и да намерим броя на елементите в един от другите масиви:
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'
);
Резултат:
4
Масивите са базирани на нула и така броят започва от 0
. Затова посочихме [1]
за да получите втория елемент в dogs
масив, който се оказва JSON обект. След това използваме .scores
за да изберете неговия масив.
Избиране на немасиви
Ако пътят сочи към стойност, различна от JSON масив, 0
се връща:
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'
);
Резултат:
0
Избиране на несъществуващ път
Ако вторият аргумент сочи към път, който не съществува, null
се връща.
Първо, нека зададем .nullvalue
до NULL
:
.nullvalue NULL
.nullvalue
командата dot ни позволява да предоставим низ, който ще се използва за замяна на нулеви стойности. Това е един от няколкото начина, по които можете да замените нулеви стойности с низ в SQLite. В този случай го зададох на NULL
. Сега всички нулеви стойности ще върнат NULL
вместо празен резултат.
Сега нека извикаме json_array_length()
, но използвайте втори аргумент, който сочи към несъществуващ път:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
);
Резултат:
NULL
Невалидни пътища
Ще получим грешка, ако пътят ни не е добре оформен:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
);
Резултат:
Runtime error: JSON path error near 'dogs'
В този случай забравих да включа $.
в предната част на пътеката.
Невалидни JSON документи
Ще получим и грешка, че JSON не е добре оформен:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Резултат:
Runtime error: malformed JSON
Този път грешката ни казва, че нашият JSON е неправилно оформен.