En SQLite, json_array_length()
La función devuelve el número de elementos en una matriz JSON determinada.
La matriz se proporciona como un argumento. Si la matriz está incrustada dentro de un documento JSON más grande, podemos usar un segundo argumento opcional para especificar la ruta a la matriz.
Si el valor no es una matriz, la función devuelve 0
.
Sintaxis
La función se puede utilizar de las dos formas siguientes:
json_array_length(X)
json_array_length(X,P)
Donde X
representa la matriz y P
es una ruta opcional que se puede usar para especificar la ruta a la matriz dentro de un documento más grande.
Ejemplo
Aquí hay un ejemplo básico para demostrarlo:
SELECT json_array_length('[ 7, 12, 10 ]');
Resultado:
3
La matriz contiene tres elementos, por lo que 3
es devuelto.
Especifique una ruta
También podemos usar un segundo argumento para especificar la ruta a la matriz:
SELECT json_array_length('[ 7, 12, 10 ]', '$');
Resultado:
3
En este caso, la matriz está en el nivel superior, por lo que pasamos $
como el camino.
El siguiente ejemplo usa una matriz que está incrustada dentro de un documento más grande:
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
En este caso, la matriz en dogs
contiene tres elementos.
Podemos navegar hacia abajo al siguiente nivel y encontrar la cantidad de elementos en una de las otras matrices:
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
Las matrices se basan en cero, por lo que el recuento comienza en 0
. Por lo tanto, especificamos [1]
para obtener el segundo elemento dentro de los dogs
matriz, que resulta ser un objeto JSON. Luego usamos .scores
para seleccionar su matriz.
Selección de no matrices
Si la ruta apunta a un valor que no sea una matriz JSON, 0
se devuelve:
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
Seleccionar una ruta inexistente
Si el segundo argumento apunta a una ruta que no existe, null
es devuelto.
Primero, configuremos .nullvalue
a NULL
:
.nullvalue NULL
El .nullvalue
El comando dot nos permite proporcionar una cadena que se usará para reemplazar valores nulos. Es una de las varias formas en que puede reemplazar valores nulos con una cadena en SQLite. En este caso, lo configuré en NULL
. Ahora, cualquier valor nulo devolverá NULL
en lugar de un resultado en blanco.
Ahora llamemos a json_array_length()
, pero usa un segundo argumento que apunta a una ruta 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
Rutas no válidas
Obtendremos un error si nuestra ruta no está bien formada:
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'
En este caso, olvidé incluir $.
al frente del camino.
Documentos JSON no válidos
También obtendremos un error de que JSON no está bien formado:
SELECT json_array_length('{ "Dogs" : }',
'$'
);
Resultado:
Runtime error: malformed JSON
Esta vez el error nos dice que nuestro JSON está mal formado.