A partir de la versión 3.38.0 de SQLite (lanzada el 22 de febrero de 2022), ahora podemos usar el -> y ->> operadores para extraer subcomponentes de documentos JSON.
El objetivo de estos operadores es ser compatibles con los operadores equivalentes de MySQL y PostgreSQL.
Además, a partir de SQLite 3.38.0, las funciones JSON ahora están integradas. Por lo tanto, ya no es necesario usar el -DSQLITE_ENABLE_JSON1 Opción de tiempo de compilación para habilitar la compatibilidad con JSON.
Sintaxis
La forma en que funcionan estos operadores es así:
json -> path
json ->> path
donde json es el documento JSON y path es el camino que queremos extraer de él.
Así que proporcionamos un documento JSON a la izquierda del operador y especificamos la ruta que queremos extraer a su derecha.
La diferencia entre estos operadores es la siguiente:
- El
->operador siempre devuelve una representación JSON del subcomponente especificado - El
->>operador siempre devuelve una representación SQL del subcomponente especificado
Ejemplo del -> Operador
Aquí hay un ejemplo simple para demostrar cómo -> el operador trabaja:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Resultado:
{"name":"Wag","type":"Dog"}
En este caso, especifiqué una ruta de '$' que devuelve el documento completo.
Especifiquemos otra ruta:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Resultado:
"Dog"
También podemos hacerlo así:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Resultado:
"Dog"
Ejemplo del ->> Operador
Esto es lo que sucede cuando usamos ->> en cambio:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Resultado:
Dog
El valor no se cita como antes. Eso es porque -> devuelve una representación JSON del subcomponente y ->> devuelve una representación SQL.
El ->> El operador devuelve un valor SQL TEXT, INTEGER, REAL o NULL que representa el subcomponente seleccionado, o NULL si el subcomponente no existe.
Aquí hay un ejemplo con una matriz:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Resultado:
5
Si el valor consiste únicamente en una matriz, podemos hacer esto:
SELECT '[ 9, 7, 5 ]' ->> '2'; Resultado:
5
Eso devuelve el elemento de la matriz en el índice especificado (en este caso, 2).
Las matrices están basadas en cero (el conteo comienza en 0 ), y por eso 2 devuelve el tercer elemento.