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.