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

SQLite JSON_REMOVE()

Wir können den SQLite json_remove() verwenden Funktion, um ein oder mehrere Elemente aus einem JSON-Objekt oder -Array zu entfernen.

Wir übergeben das ursprüngliche JSON als erstes Argument, wenn wir die Funktion aufrufen, gefolgt von einem oder mehreren Pfaden, die angeben, welche Elemente entfernt werden sollen. Mit „Elementen“ meine ich entweder Array-Elemente oder Objektmitglieder (Schlüssel/Wert-Paare).

Syntax

Die Syntax lautet wie folgt:

json_remove(X,P,...)

Wobei X repräsentiert das ursprüngliche JSON und P,... repräsentiert den/die zu löschenden Pfad/e.

Beispiel

Hier ist ein Beispiel zur Veranschaulichung:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Ergebnis:

{"name":"Fluffy"}

Hier haben wir $.age angegeben path, und das wurde aus dem JSON-Dokument entfernt.

Mehrere Mitglieder entfernen

Wir können mehrere Mitglieder aus einem JSON-Objekt entfernen, indem wir mehrere Pfade angeben, die durch ein Komma getrennt sind:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Ergebnis:

{"name":"Fluffy"}

Arrays

Wir können Array-Elemente entfernen, indem wir den Index des Elements angeben:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Ergebnis:

[0,1,3]

Arrays sind nullbasiert, daher beginnt die Zählung bei 0 .

Es ist jedoch wichtig, auf die Reihenfolge zu achten, in der die Entfernungen vorgenommen werden. Entfernungen erfolgen nacheinander von links nach rechts. Änderungen, die durch frühere Entfernungen verursacht wurden, können die Pfadsuche für nachfolgende Argumente beeinflussen.

Hier ist ein Beispiel dafür, wie sich das auf unser Ergebnis auswirken kann:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Ergebnis:

[1,2]

In diesem Fall Array-Element 0 wurde zuerst gelöscht, dann das Array-Element 2 wurde aus dem verbleibenden Array gelöscht. Mit anderen Worten, der zweite Pfad entfernte das Element aus dem Array, nachdem der erste Pfad bereits entfernt worden war.

Das resultierende Array ist eines, das wir möglicherweise nicht erwartet haben. Anstatt die Elemente 0 zu entfernen und 2 aus dem ursprünglichen Array haben wir die Elemente 0 entfernt und 3 aus dem ursprünglichen Array.

Wir können dieses Problem lösen, indem wir die Pfade neu anordnen:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Ergebnis:

[1,3]

Keine Pfade

Die Pfadargumente sind eigentlich optional. Wenn wir json_remove() aufrufen ohne Pfadargumente gibt es eine verkleinerte Version der JSON-Eingabe zurück (d. h. mit entfernten Leerzeichen):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Ergebnis:

{"name":"Fluffy","type":"Cat","age":10}

Dies ist das gleiche Ergebnis, das wir erhalten würden, wenn wir json() verwenden würden Funktion anstelle von json_remove() .

Nicht vorhandener Pfad

Die Angabe eines Pfads, der nicht in der Eingabe-JSON vorhanden ist, führt dazu, dass die ursprüngliche JSON unverändert zurückgegeben wird:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Ergebnis:

{"name":"Fluffy","age":10}

Ungültige Pfade

Wir erhalten eine Fehlermeldung, wenn unser Pfad nicht wohlgeformt ist:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Ergebnis:

Runtime error: JSON path error near 'age'

In diesem Fall habe ich vergessen, $. einzufügen am Anfang des Weges.

Ungültige JSON-Dokumente

Außerdem erhalten wir eine Fehlermeldung, dass JSON nicht wohlgeformt ist:

SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Ergebnis:

Runtime error: malformed JSON

Diesmal sagt uns der Fehler, dass unser JSON fehlerhaft ist.