Ab SQLite-Version 3.38.0 (veröffentlicht am 22. Februar 2022) können wir jetzt den -> verwenden und ->> Operatoren zum Extrahieren von Unterkomponenten von JSON-Dokumenten.
Das Ziel dieser Operatoren ist es, mit den entsprechenden MySQL- und PostgreSQL-Operatoren kompatibel zu sein.
Außerdem sind ab SQLite 3.38.0 die JSON-Funktionen jetzt integriert. Daher ist es nicht mehr erforderlich, -DSQLITE_ENABLE_JSON1 zu verwenden Option zur Kompilierzeit, um die JSON-Unterstützung zu aktivieren.
Syntax
Diese Operatoren funktionieren wie folgt:
json -> path
json ->> path
Wobei json ist das JSON-Dokument und path ist der Pfad, den wir daraus extrahieren möchten.
Also stellen wir links vom Operator ein JSON-Dokument bereit und geben rechts davon den Pfad an, den wir extrahieren möchten.
Der Unterschied zwischen diesen Operatoren sieht folgendermaßen aus:
- Der
->-Operator gibt immer eine JSON-Darstellung der angegebenen Unterkomponente zurück - Der
->>-Operator gibt immer eine SQL-Darstellung der angegebenen Unterkomponente zurück
Beispiel für -> Betreiber
Hier ist ein einfaches Beispiel, um zu demonstrieren, wie die -> Betreiber funktioniert:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Ergebnis:
{"name":"Wag","type":"Dog"}
In diesem Fall habe ich einen Pfad von '$' angegeben die das gesamte Dokument zurückgibt.
Lassen Sie uns einen anderen Pfad angeben:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Ergebnis:
"Dog"
Wir können es auch so machen:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Ergebnis:
"Dog"
Beispiel für ->> Betreiber
Folgendes passiert, wenn wir ->> verwenden stattdessen:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Ergebnis:
Dog
Der Wert wird nicht wie zuvor angegeben. Das liegt daran, dass -> gibt eine JSON-Darstellung der Unterkomponente und ->> zurück gibt eine SQL-Darstellung zurück.
Der ->> Der Operator gibt einen SQL TEXT-, INTEGER-, REAL- oder NULL-Wert zurück, der die ausgewählte Unterkomponente darstellt, oder NULL, wenn die Unterkomponente nicht existiert.
Hier ist ein Beispiel mit einem Array:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Ergebnis:
5
Wenn der Wert nur aus einem Array besteht, können wir Folgendes tun:
SELECT '[ 9, 7, 5 ]' ->> '2'; Ergebnis:
5
Das gibt das Array-Element am angegebenen Index zurück (in diesem Fall 2).
Arrays sind nullbasiert (die Zählung beginnt bei 0 ), und deshalb 2 gibt das dritte Element zurück.