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.