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

Operadores para extraer subcomponentes JSON

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.