Das SQLite json_set()
-Funktion ermöglicht es uns, einen Wert in ein JSON-Dokument einzufügen oder zu ersetzen.
Wir übergeben das ursprüngliche JSON als erstes Argument, wenn wir die Funktion aufrufen, gefolgt von einem Pfad, der angibt, wo der neue Wert eingefügt/ersetzt werden soll, gefolgt von dem einzufügenden/ersetzenden Wert.
Wir können bei Bedarf auch mehrere Schlüssel/Wert-Paare einfügen/ersetzen.
Syntax
So funktioniert es:
json_set(json, path1, value1, path2, value2...)
Wobei json
repräsentiert das ursprüngliche JSON und path1, value1, path2, value2...
sind Pfad/Wert-Paare, die wir verwenden können, um neue Werte in das JSON-Dokument einzufügen (oder gegebenenfalls zu ersetzen).
Beispiel
Hier ist ein einfaches Beispiel zur Veranschaulichung:
SELECT json_set('{ "a" : 1 }', '$.b', 2);
Ergebnis:
{"a":1,"b":2}
Hier habe ich ein neues Schlüssel/Wert-Paar eingefügt ("b":2
) in das JSON-Dokument.
Wir können mehrere Schlüssel/Wert-Paare wie folgt einfügen:
SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );
Ergebnis:
{"a":1,"b":2,"c":3}
Ich habe einfach mehr Schlüssel/Wert-Argumente hinzugefügt, als ich json_set()
aufgerufen habe .
Werte ersetzen
Wenn der Schlüssel bereits existiert, wird sein Wert durch den neuen Wert ersetzt:
SELECT json_set('{ "a" : 1, "b" : 2 }', '$.b', 3);
Ergebnis:
{"a":1,"b":3}
Dies ist der Hauptunterschied zwischen json_set()
und json_insert()
. Der json_insert()
Die Funktion fügt den Wert nicht ein, wenn der Schlüssel bereits vorhanden ist.
Eine andere Möglichkeit, Werte zu ersetzen, ist die Verwendung von json_replace()
.
Objekt einfügen
Hier ist ein Beispiel für das Einfügen eines JSON-Objekts:
SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );
Ergebnis:
{"a":1,"b":{"c":2}}
In diesem Fall habe ich json()
verwendet Funktion, um mein Argument als JSON-String zurückzugeben. Folgendes passiert, wenn ich das nicht tue:
SELECT json_set('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );
Ergebnis:
{"a":1,"b":"{ \"c\" : 2 }"}
Das JSON-Dokument wird als Textwert anstelle eines JSON-Objekts eingefügt, und seine doppelten Anführungszeichen werden daher mit umgekehrten Schrägstrichen maskiert.
Das einfache Entfernen der einfachen Anführungszeichen führt jedoch zu einem Fehler:
SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
Ergebnis:
Parse error: unrecognized token: "{" SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } ); error here ---^
Ohne einfache Anführungszeichen oder json()
-Funktion erhalten wir einen Fehler, sobald sie auf die linke geschweifte Klammer trifft.
Eine andere Möglichkeit, ein JSON-Objekt einzufügen, ist die Verwendung von json_object()
Funktion anstelle von json()
Funktion:
SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );
Ergebnis:
{"a":1,"b":{"c":2}}
Ein Array einfügen
Ähnlich verhält es sich beim Einfügen von Arrays:
SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));
Ergebnis:
{"a":1,"b":[2,3,4]}
Wenn wir json()
entfernen Funktion erhalten wir Folgendes:
SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');
Ergebnis:
{"a":1,"b":"[ 2, 3, 4 ]"}
Und wenn wir die einfachen Anführungszeichen entfernen, erhalten wir einen Fehler:
SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
Ergebnis:
Parse error: no such column: 2, 3, 4 SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]); error here ---^
Wir können alternativ das json_array()
verwenden Funktion anstelle von json()
. Mit dieser Funktion können Sie ein Array basierend auf seinen Argumenten erstellen:
SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );
Ergebnis:
{"a":1,"b":[2,3,4]}
Werte an das Ende eines Arrays anhängen
Wir können json_set()
verwenden um Werte an das Ende eines Arrays anzuhängen.
Verwenden Sie dazu einen Array-Index von [#]
:
SELECT json_set('[ 1, 2, 3 ]', '$[#]', 4 );
Ergebnis:
[1,2,3,4]
Das gleiche Prinzip gilt für verschachtelte Arrays:
SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );
Ergebnis:
[1,["a","b","c"],3]
Array-Elemente ersetzen
Wir können json_set()
verwenden um Elemente im Array zu ersetzen:
SELECT json_set('[ 1, 2, 3 ]', '$[1]', 4 );
Ergebnis:
[1,4,3]
Arrays sind nullbasiert, also [1]
gibt das zweite Array-Element an.
Der json_replace()
Die Funktion kann auch verwendet werden, um vorhandene Elemente zu ersetzen. Auch dies unterscheidet sich von json_insert()
, die vorhandene Elemente nicht ersetzt.
Ungültige Pfade
Wir erhalten eine Fehlermeldung, wenn unser Pfad nicht wohlgeformt ist:
SELECT json_set('{ "a" : 1 }', 'b', 2);
Ergebnis:
Runtime error: JSON path error near 'b'
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_set('{ "a" : 1', '$.b', 2);
Ergebnis:
Runtime error: malformed JSON
Diesmal sagt uns der Fehler, dass unser JSON fehlerhaft ist.