SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite JSON_ARRAY_LENGTH()


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.