Počínaje verzí SQLite 3.38.0 (vydanou 22. února 2022) nyní můžeme používat ->
a ->>
operátory k extrahování dílčích komponent dokumentů JSON.
Cílem těchto operátorů je být kompatibilní s ekvivalentními operátory MySQL a PostgreSQL.
Počínaje SQLite 3.38.0 jsou nyní vestavěné funkce JSON. Proto již není nutné používat -DSQLITE_ENABLE_JSON1
možnost kompilace pro povolení podpory JSON.
Syntaxe
Způsob fungování těchto operátorů je následující:
json -> path
json ->> path
Kde json
je dokument JSON a path
je cesta, kterou z něj chceme extrahovat.
Nalevo od operátoru tedy poskytneme dokument JSON a napravo od něj určíme cestu, kterou chceme extrahovat.
Rozdíl mezi těmito operátory je následující:
->
operátor vždy vrací JSON reprezentaci zadané dílčí komponenty->>
operátor vždy vrací SQL reprezentaci zadané dílčí komponenty
Příklad ->
Operátor
Zde je jednoduchý příklad, který ukazuje, jak ->
operátor funguje:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$';
Výsledek:
{"name":"Wag","type":"Dog"}
V tomto případě jsem zadal cestu '$'
který vrátí celý dokument.
Uvedeme jinou cestu:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type';
Výsledek:
"Dog"
Můžeme to udělat také takto:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type';
Výsledek:
"Dog"
Příklad ->>
Operátor
Zde je to, co se stane, když použijeme ->>
místo toho:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type';
Výsledek:
Dog
Hodnota není uvedena jako dříve. To proto, že ->
vrátí JSON reprezentaci dílčí komponenty a ->>
vrátí reprezentaci SQL.
->>
Operátor vrátí hodnotu SQL TEXT, INTEGER, REAL nebo NULL, která představuje vybranou dílčí komponentu, nebo NULL, pokud dílčí komponenta neexistuje.
Zde je příklad s polem:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]';
Výsledek:
5
Pokud se hodnota skládá pouze z pole, můžeme provést toto:
SELECT '[ 9, 7, 5 ]' ->> '2';
Výsledek:
5
To vrátí prvek pole na zadaném indexu (v tomto případě 2).
Pole jsou založeny na nule (počítání začíná na 0
), a proto 2
vrátí třetí položku.