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.