sql >> Base de Datos >  >> RDS >> SQLite

SQLiteJSON_ARRAY_LENGTH()

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.