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.