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

SQLite JSON_SET()

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.