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

JSON_INSERT() vs. JSON_SET() vs. JSON_REPLACE() in SQLite

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.