SQLite bietet mehrere Funktionen zum Einfügen, Festlegen und Ersetzen von Werten in einem JSON-Dokument. Insbesondere stellt es json_insert()
bereit , json_set()
und json_replace()
.
Diese Funktionen führen ähnliche Aufgaben aus und Sie können sie manchmal bis zu einem gewissen Punkt austauschbar verwenden.
Aber es gibt definitiv einen klaren Unterschied zwischen den einzelnen Funktionen.
Der Unterschied
Die folgende Tabelle zeigt den Unterschied zwischen diesen Funktionen:
Funktion | Überschreiben, falls bereits vorhanden? | Erstellen, wenn nicht vorhanden? |
---|---|---|
json_insert() | Nein | Ja |
json_replace() | Ja | Nein |
json_set() | Ja | Ja |
Der Unterschied zwischen diesen Funktionen besteht also darin, wie sie mit vorhandenen und nicht vorhandenen Schlüsseln/Werten umgehen.
Beispiele
Hier sind einige einfache Beispiele, um zu demonstrieren, wie jede Funktion mit vorhandenen und nicht vorhandenen Schlüsseln/Werten umgeht.
Wenn der Schlüssel bereits existiert
So geht jede Funktion mit der Aktualisierung eines bereits vorhandenen Schlüssels um:
SELECT
json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.a', 2) AS json_set;
Ergebnis:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
Wir können das json_insert()
sehen hat nichts aktualisiert, aber die anderen beiden Funktionen haben es getan.
Ähnlich verhält es sich mit Arrays:
SELECT
json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;
Ergebnis:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Wenn der Schlüssel nicht existiert
Folgendes passiert, wenn der Schlüssel nicht existiert:
SELECT
json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.b', 2) AS json_set;
Ergebnis:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
Wir können das json_replace()
sehen hat das neue Schlüssel/Wert-Paar nicht eingefügt, aber die anderen beiden Funktionen haben es getan.
Gleiches gilt für Arrays:
SELECT
json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;
Ergebnis:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Dies kann auch mit dem [#]
erfolgen Pfad:
SELECT
json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;
Ergebnis:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Ein Vorteil der Verwendung von [#]
ist, dass Sie nicht wissen müssen, wie viele Elemente sich bereits im Array befinden.