I SQLite er ->> operatør udtrækker en underkomponent fra et JSON-dokument og returnerer en SQL-repræsentation af den underkomponent.
Syntaks
Syntaksen ser sådan ud:
json ->> path
Hvor json er JSON-dokumentet og sti er stien til underkomponenten, som vi ønsker at udtrække fra den.
Så vi leverer et JSON-dokument til venstre for operatøren, og vi angiver stien, vi ønsker at udtrække, til højre for det.
-> operatør i stedet.
Eksempler
Her er et simpelt eksempel til at demonstrere, hvordan ->> operatør virker:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$'; Resultat:
{"name":"Wag","type":"Dog"}
I dette tilfælde har jeg angivet en sti til '$' som returnerer hele dokumentet.
Lad os specificere en anden sti:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Resultat:
Dog
Vi kan også helt udelade dollartegnet og punktum, sådan her:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type'; Resultat:
Dog
Her er det med et større JSON-dokument:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0]'; Resultat:
{"user":"Spike","age":30,"scores":[9,7,3]}
I SQLite er arrays nul-baserede, og specificerer derfor [0] returnerer det første array-element.
Hvis vi kun ville have den brugers score, kunne vi gøre dette:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0].scores'; Resultat:
[9,7,3]
Vi kan gå endnu dybere og udtrække en bestemt score:
SELECT '[
{
"user" : "Spike",
"age" : 30,
"scores" : [ 9, 7, 3 ]
},
{
"user" : "Faye",
"age" : 25,
"scores" : [ 90, 87, 93 ]
},
{
"user" : "Jet",
"age" : 40,
"scores" : [ 50, 38, 67 ]
}
]' ->> '$[0].scores[1]'; Resultat:
7
Ikke-eksisterende sti
Hvis stien ikke findes i JSON, returneres en null-værdi:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age'; Resultat:
null
Bemærk, at I SQLite kan du bruge .nullvalue for at angive en streng, der skal udlæses, når en nulværdi returneres. I mit tilfælde havde jeg tidligere kørt følgende kommando:
.nullvalue null
Det angiver, at teksten null skal udlæses, hver gang en nulværdi returneres. Det er grunden til, at ovenstående eksempel udskriver teksten null . Hvis jeg ikke havde gjort dette, kunne resultatet have været tomt.
Ugyldig JSON
Hvis det første argument ikke er gyldigt JSON, vises en fejl:
SELECT '{ "name" }' ->> '$'; Resultat:
Runtime error: malformed JSON
Ugyldig sti
Og hvis det andet argument ikke er en gyldig sti, vises en fejl:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name'; Resultat:
Runtime error: JSON path error near 'name'
I dette tilfælde glemte jeg at inkludere punktum (. ) mellem dollartegnet ($ ) og navn .
Men som nævnt er det muligt helt at udelade dollartegnet og punktum:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name'; Resultat:
Wag