Från och med SQLite version 3.38.0 (släppt den 22 februari 2022) kan vi nu använda -> och ->> operatörer för att extrahera underkomponenter av JSON-dokument.
Syftet med dessa operatorer är att vara kompatibla med motsvarande MySQL- och PostgreSQL-operatorer.
Från och med SQLite 3.38.0 är JSON-funktionerna nu inbyggda. Därför är det inte längre nödvändigt att använda -DSQLITE_ENABLE_JSON1 kompileringstid för att aktivera JSON-stöd.
Syntax
Hur dessa operatörer fungerar är så här:
json -> path
json ->> path
Där json är JSON-dokumentet och sökvägen är vägen vi vill extrahera från den.
Så vi tillhandahåller ett JSON-dokument till vänster om operatören, och vi anger sökvägen vi vill extrahera till höger om den.
Skillnaden mellan dessa operatörer ser ut så här:
-
-> operatorn returnerar alltid en JSON-representation av den angivna underkomponenten -
->> operatorn returnerar alltid en SQL-representation av den angivna underkomponenten
Exempel på -> Operatör
Här är ett enkelt exempel för att visa hur -> operatören fungerar:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Resultat:
{"name":"Wag","type":"Dog"}
I det här fallet angav jag sökvägen '$' som returnerar hela dokumentet.
Låt oss ange en annan sökväg:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Resultat:
"Dog"
Vi kan också göra så här:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Resultat:
"Dog"
Exempel på ->> Operatör
Här är vad som händer när vi använder ->> istället:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Resultat:
Dog
Värdet anges inte som det var tidigare. Det beror på att -> returnerar en JSON-representation av underkomponenten och ->> returnerar en SQL-representation.
Här är ett exempel med en array:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Resultat:
5
Om värdet enbart består av en array kan vi göra detta:
SELECT '[ 9, 7, 5 ]' ->> '2'; Resultat:
5
Det returnerar arrayelementet vid det angivna indexet (i detta fall 2).
Matriser är nollbaserade (räkningen börjar vid 0 ), och det är därför 2 returnerar den tredje artikeln.