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

SQLiteJSON_REMOVE()

Podemos usar SQLite json_remove() función para eliminar uno o más elementos de un objeto o matriz JSON.

Pasamos el JSON original como primer argumento cuando llamamos a la función, seguido de una o más rutas que especifican qué elementos eliminar. Por "elementos", me refiero a elementos de matriz o miembros de objetos (pares clave/valor).

Sintaxis

La sintaxis es así:

json_remove(X,P,...)

Donde X representa el JSON original y P,... representa la ruta/s para eliminar.

Ejemplo

Aquí hay un ejemplo para demostrarlo:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Resultado:

{"name":"Fluffy"}

Aquí, especificamos el $.age ruta, y eso es lo que se eliminó del documento JSON.

Eliminar varios miembros

Podemos eliminar varios miembros de un objeto JSON especificando varias rutas, separadas por una coma:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Resultado:

{"name":"Fluffy"}

Arreglos

Podemos eliminar elementos de la matriz especificando el índice del elemento:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Resultado:

[0,1,3]

Las matrices están basadas en cero, por lo que el conteo comienza desde 0 .

Sin embargo, es importante tener en cuenta el orden en que se realizan las eliminaciones. Las eliminaciones ocurren secuencialmente de izquierda a derecha. Los cambios causados ​​por eliminaciones anteriores pueden afectar la búsqueda de rutas para argumentos posteriores.

Aquí hay un ejemplo de cómo eso puede afectar nuestro resultado:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Resultado:

[1,2]

En este caso, elemento de matriz 0 se eliminó primero, luego el elemento de matriz 2 fue eliminado de la matriz restante. En otras palabras, la segunda ruta eliminó el elemento de la matriz después de que la primera ruta ya se había eliminado.

La matriz resultante es una que quizás no hayamos anticipado. En lugar de eliminar elementos 0 y 2 de la matriz original, hemos eliminado los elementos 0 y 3 de la matriz original.

Podemos solucionar este problema reordenando las rutas:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Resultado:

[1,3]

Sin caminos

Los argumentos de ruta son en realidad opcionales. Si llamamos a json_remove() sin argumentos de ruta, devuelve una versión minimizada del JSON de entrada (es decir, con el exceso de espacio en blanco eliminado):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Resultado:

{"name":"Fluffy","type":"Cat","age":10}

Este es el mismo resultado que obtendríamos si usáramos json() función en lugar de json_remove() .

Ruta inexistente

Especificar una ruta que no existe en el JSON de entrada da como resultado que se devuelva el JSON original, sin cambios:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Resultado:

{"name":"Fluffy","age":10}

Rutas no válidas

Obtendremos un error si nuestra ruta no está bien formada:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Resultado:

Runtime error: JSON path error near 'age'

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_remove('{ "name" : "Fluffy", "age" }', '$.age');

Resultado:

Runtime error: malformed JSON

Esta vez el error nos dice que nuestro JSON está mal formado.