Vanaf SQLite versie 3.38.0 (uitgebracht op 22 februari 2022), kunnen we nu de -> gebruiken en ->> operators om subcomponenten van JSON-documenten te extraheren.
Het doel van deze operators is om compatibel te zijn met de equivalente MySQL- en PostgreSQL-operators.
Vanaf SQLite 3.38.0 zijn de JSON-functies nu ook ingebouwd. Daarom is het niet langer nodig om de -DSQLITE_ENABLE_JSON1 te gebruiken compile-time optie om JSON-ondersteuning in te schakelen.
Syntaxis
De manier waarop deze operators werken is als volgt:
json -> path
json ->> path
Waar json is het JSON-document en path is het pad dat we eruit willen halen.
We bieden dus een JSON-document aan de linkerkant van de operator, en we specificeren het pad dat we rechts ervan willen extraheren.
Het verschil tussen deze operators gaat als volgt:
- De
->operator retourneert altijd een JSON-representatie van de opgegeven subcomponent - De
->>operator retourneert altijd een SQL-representatie van de gespecificeerde subcomponent
Voorbeeld van de -> Operator
Hier is een eenvoudig voorbeeld om te demonstreren hoe de -> operator werkt:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Resultaat:
{"name":"Wag","type":"Dog"}
In dit geval heb ik een pad gespecificeerd van '$' die het hele document retourneert.
Laten we een ander pad specificeren:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Resultaat:
"Dog"
We kunnen het ook zo doen:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Resultaat:
"Dog"
Voorbeeld van de ->> Operator
Dit is wat er gebeurt als we ->> gebruiken in plaats daarvan:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Resultaat:
Dog
De waarde wordt niet geciteerd zoals voorheen. Dat komt omdat -> retourneert een JSON-representatie van de subcomponent en ->> retourneert een SQL-representatie.
De ->> operator retourneert een SQL TEXT, INTEGER, REAL of NULL-waarde die de geselecteerde subcomponent vertegenwoordigt, of NULL als de subcomponent niet bestaat.
Hier is een voorbeeld met een array:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Resultaat:
5
Als de waarde uitsluitend uit een array bestaat, kunnen we dit doen:
SELECT '[ 9, 7, 5 ]' ->> '2'; Resultaat:
5
Dat geeft het array-element terug met de opgegeven index (in dit geval 2).
Arrays zijn gebaseerd op nul (tellen begint bij 0 ), en daarom 2 geeft het derde item terug.