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.