SQLite
 sql >> база данни >  >> RDS >> SQLite

SQLite JSON_ARRAY_LENGTH()

В 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 е неправилно оформен.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android стая - Как да изчистите sqlite_sequence за цялата таблица

  2. Запазване на резултатите от SQLite заявка в текстов файл

  3. Използване на запаметена процедура Sqlite в Android

  4. SQLite JSON_OBJECT()

  5. Променено ли е поведението на Android SQLite Journal?