No SQLite, o
json_array_length() A função retorna o número de elementos em uma determinada matriz JSON. A matriz é fornecida como um argumento. Se a matriz estiver inserida em um documento JSON maior, podemos usar um segundo argumento opcional para especificar o caminho para a matriz.
Se o valor não for um array, a função retornará
0 . Sintaxe
A função pode ser usada das duas maneiras a seguir:
json_array_length(X)
json_array_length(X,P) Onde
X representa a matriz e P é um caminho opcional que pode ser usado para especificar o caminho para a matriz em um documento maior. Exemplo
Aqui está um exemplo básico para demonstrar:
SELECT json_array_length('[ 7, 12, 10 ]'); Resultado:
3
A matriz contém três elementos e, portanto,
3 é devolvido. Especifique um caminho
Também podemos usar um segundo argumento para especificar o caminho para o array:
SELECT json_array_length('[ 7, 12, 10 ]', '$'); Resultado:
3
Nesse caso, o array está no nível superior e, portanto, passamos
$ como o caminho. O exemplo a seguir usa uma matriz incorporada em um documento maior:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs'
); Resultado:
3
Neste caso, o array em
dogs contém três elementos. Podemos navegar para o próximo nível e encontrar o número de elementos em uma das outras matrizes:
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'
); Resultado:
4
As matrizes são baseadas em zero e, portanto, a contagem começa em
0 . Portanto, especificamos [1] para obter o segundo elemento dentro do dogs array, que por acaso é um objeto JSON. Em seguida, usamos .scores para selecionar sua matriz. Seleção de não matrizes
Se o caminho apontar para um valor diferente de uma matriz JSON,
0 é retornado: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'
); Resultado:
0
Selecionando um caminho inexistente
Se o segundo argumento apontar para um caminho que não existe,
null é devolvido. Primeiro, vamos definir
.nullvalue para NULL :.nullvalue NULL O
.nullvalue O comando dot nos permite fornecer uma string que será usada para substituir valores nulos. É uma das várias maneiras de substituir valores nulos por uma string no SQLite. Neste caso, defini-lo como NULL . Agora, qualquer valor nulo retornará NULL em vez de um resultado em branco. Agora vamos chamar
json_array_length() , mas use um segundo argumento que aponta para um caminho inexistente:SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.cats'
); Resultado:
NULL
Caminhos inválidos
Receberemos um erro se nosso caminho não estiver bem formado:
SELECT json_array_length('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'dogs'
); Resultado:
Runtime error: JSON path error near 'dogs'
Nesse caso, esqueci de incluir
$. na frente do caminho. Documentos JSON inválidos
Também receberemos um erro de que o JSON não está bem formado:
SELECT json_array_length('{ "Dogs" : }',
'$'
); Resultado:
Runtime error: malformed JSON
Desta vez, o erro nos diz que nosso JSON está malformado.