In SQLite die ->>
-Operator extrahiert eine Unterkomponente aus einem JSON-Dokument und gibt eine SQL-Darstellung dieser Unterkomponente zurück.
Der ->>
-Operator wurde erstmals in SQLite-Version 3.38.0 (veröffentlicht am 22. Februar 2022) eingeführt.
Syntax
Die Syntax lautet wie folgt:
json ->> path
Wobei json
ist das JSON-Dokument und path
ist der Pfad zu der Unterkomponente, die 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 ->>
-Operator gibt immer eine SQL-Darstellung der angegebenen Unterkomponente zurück. Um eine JSON-Darstellung zurückzugeben, verwenden Sie ->
Operator statt.
Beispiele
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 das Dollarzeichen und den Punkt auch ganz weglassen, wie hier:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'type';
Ergebnis:
Dog
Hier ist es mit einem größeren 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]';
Ergebnis:
{"user":"Spike","age":30,"scores":[9,7,3]}
In SQLite sind Arrays nullbasiert und geben daher [0]
an gibt das erste Array-Element zurück.
Wenn wir nur die Punktzahlen dieses Benutzers abrufen möchten, könnten wir Folgendes tun:
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';
Ergebnis:
[9,7,3]
Wir können noch tiefer gehen und eine bestimmte Punktzahl extrahieren:
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]';
Ergebnis:
7
Nicht vorhandener Pfad
Wenn der Pfad nicht im JSON vorhanden ist, wird ein Nullwert zurückgegeben:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.age';
Ergebnis:
null
Beachten Sie, dass Sie in SQLite .nullvalue
verwenden können um eine Zeichenfolge anzugeben, die ausgegeben werden soll, wenn ein Nullwert zurückgegeben wird. In meinem Fall hatte ich zuvor den folgenden Befehl ausgeführt:
.nullvalue null
Das gibt an, dass der Text null
ausgegeben werden, wenn ein Nullwert zurückgegeben wird. Aus diesem Grund gibt das obige Beispiel den Text null
aus . Wenn ich das nicht getan hätte, wäre das Ergebnis möglicherweise leer gewesen.
Ungültiges JSON
Wenn das erste Argument kein gültiges JSON ist, wird ein Fehler ausgegeben:
SELECT '{ "name" }' ->> '$';
Ergebnis:
Runtime error: malformed JSON
Ungültiger Pfad
Und wenn das zweite Argument kein gültiger Pfad ist, wird ein Fehler ausgegeben:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$name';
Ergebnis:
Runtime error: JSON path error near 'name'
In diesem Fall habe ich vergessen, den Punkt (.
) zwischen dem Dollarzeichen ($
) und name
.
Wie bereits erwähnt, ist es jedoch möglich, das Dollarzeichen und den Punkt ganz wegzulassen:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> 'name';
Ergebnis:
Wag