SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Betreiber

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