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

SQLite JSON_INSERT()

Die SQLite json_insert() Mit der Funktion können wir einen neuen Wert in ein JSON-Dokument einfügen.

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 werden soll, gefolgt von dem einzufügenden Wert.

Bei Bedarf können wir auch mehrere Schlüssel/Wert-Paare einfügen.

Syntax

Die Funktion wird wie folgt aufgerufen:

json_extract(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.

Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung:

SELECT json_insert('{ "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_insert('{ "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_insert() aufgerufen habe .

Schlüssel/Wert existiert bereits?

Der json_insert() Die Funktion fügt den Wert nicht ein, wenn der Schlüssel bereits vorhanden ist:

SELECT json_insert('{ "a" : 1 }', '$.a', 2);

Ergebnis:

{"a":1}

In diesem Fall ist der Schlüssel a existiert bereits im JSON, daher funktioniert der Versuch, einen neuen Wert für diesen Schlüssel einzufügen, nicht.

Um einen Wert zu ersetzen, verwenden Sie entweder json_replace() oder json_set() .

Objekt einfügen

Hier ist ein Beispiel für das Einfügen eines weiteren JSON-Dokuments:

SELECT json_insert('{ "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_insert('{ "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 ist aber fair genug. Schließlich haben wir den neuen Wert in einfache Anführungszeichen eingeschlossen. Woher sollte SQLite wissen, ob wir einen String oder ein JSON-Objekt einfügen wollten?

Und es ist nicht so, dass wir diese einfachen Anführungszeichen einfach entfernen können:

SELECT json_insert('{ "a" : 1 }', '$.b', { "c" : 2 } );

Ergebnis:

Parse error: unrecognized token: "{"
  SELECT json_insert('{ "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_insert('{ "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_insert('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

Ergebnis:

{"a":1,"b":[2,3,4]}

Wenn wir json() entfernen Funktion erhalten wir Folgendes:

SELECT json_insert('{ "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_insert('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Ergebnis:

Parse error: no such column:  2, 3, 4 
  SELECT json_insert('{ "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_insert('{ "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_insert() verwenden um Werte an das Ende eines Arrays anzuhängen.

Verwenden Sie dazu einen Array-Index von [#] :

SELECT json_insert('[ 1, 2, 3 ]', '$[#]', 4 );

Ergebnis:

[1,2,3,4]

Das gleiche Prinzip gilt für verschachtelte Arrays:

SELECT json_insert('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

Ergebnis:

[1,["a","b","c"],3]

Ungültige Pfade

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

SELECT json_insert('{ "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_insert('{ "a" : 1', '$.b', 2);

Ergebnis:

Runtime error: malformed JSON

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