SQLite
 sql >> Database >  >> RDS >> SQLite

Operatori per l'estrazione di sottocomponenti JSON

A partire da SQLite versione 3.38.0 (rilasciata il 22 febbraio 2022), ora possiamo utilizzare il -> e ->> operatori per estrarre i sottocomponenti dei documenti JSON.

Lo scopo di questi operatori è di essere compatibili con gli operatori MySQL e PostgreSQL equivalenti.

Inoltre, a partire da SQLite 3.38.0, le funzioni JSON sono ora integrate. Pertanto, non è più necessario utilizzare il -DSQLITE_ENABLE_JSON1 opzione in fase di compilazione per abilitare il supporto JSON.

Sintassi

Il modo in cui lavorano questi operatori è questo:

json -> path
json ->> path

Dove json è il documento JSON e il path è il percorso che vogliamo estrarne.

Quindi forniamo un documento JSON alla sinistra dell'operatore e specifichiamo il percorso che vogliamo estrarre alla sua destra.

La differenza tra questi operatori è questa:

  • Il -> l'operatore restituisce sempre una rappresentazione JSON del sottocomponente specificato
  • Il ->> l'operatore restituisce sempre una rappresentazione SQL del sottocomponente specificato

Esempio del -> Operatore

Ecco un semplice esempio per dimostrare come il -> operatore lavora:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$';

Risultato:

{"name":"Wag","type":"Dog"}

In questo caso, ho specificato un percorso di '$' che restituisce l'intero documento.

Specifichiamo un altro percorso:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type';

Risultato:

"Dog"

Possiamo anche farlo in questo modo:

SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type';

Risultato:

"Dog"

Esempio del ->> Operatore

Ecco cosa succede quando utilizziamo ->> invece:

SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';

Risultato:

Dog

Il valore non è citato come prima. Questo perché -> restituisce una rappresentazione JSON del sottocomponente e ->> restituisce una rappresentazione SQL.

Il ->> restituisce un valore SQL TEXT, INTEGER, REAL o NULL che rappresenta il sottocomponente selezionato o NULL se il sottocomponente non esiste.

Ecco un esempio con un array:

SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]';

Risultato:

5

Se il valore è costituito esclusivamente da un array, possiamo farlo:

SELECT '[ 9, 7, 5 ]' ->> '2';

Risultato:

5

Ciò restituisce l'elemento dell'array all'indice specificato (in questo caso 2).

Gli array sono a base zero (il conteggio inizia da 0 ), ed è per questo 2 restituisce il terzo articolo.