SQLite biedt verschillende functies voor het invoegen, instellen en vervangen van waarden in een JSON-document. In het bijzonder biedt het json_insert()
, json_set()
, en json_replace()
.
Deze functies voeren vergelijkbare taken uit en u kunt ze soms tot op zekere hoogte door elkaar gebruiken.
Maar er is zeker een duidelijk verschil tussen elke functie.
Het verschil
De volgende tabel geeft het verschil tussen deze functies weer:
Functie | Overschrijven indien al bestaat? | Maken als niet bestaat? |
---|---|---|
json_insert() | Nee | Ja |
json_replace() | Ja | Nee |
json_set() | Ja | Ja |
Het verschil tussen deze functies is dus hoe ze omgaan met bestaande en niet-bestaande sleutels/waarden.
Voorbeelden
Hier zijn enkele eenvoudige voorbeelden om te laten zien hoe elke functie omgaat met bestaande en niet-bestaande sleutels/waarden.
Als de sleutel al bestaat
Hier is hoe elke functie omgaat met het updaten van een sleutel die al bestaat:
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;
Resultaat:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
We kunnen zien dat json_insert()
heeft niets bijgewerkt, maar de andere twee functies wel.
Hetzelfde geldt voor 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;
Resultaat:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Als de sleutel niet bestaat
Dit is wat er gebeurt als de sleutel niet bestaat:
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;
Resultaat:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
We kunnen zien dat json_replace()
heeft het nieuwe sleutel/waarde-paar niet ingevoegd, maar de andere twee functies wel.
Zelfde deal met 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;
Resultaat:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Dit kan ook met de [#]
pad:
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;
Resultaat:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Een voordeel van het gebruik van [#]
is dat je niet hoeft te weten hoeveel elementen er al in de array zitten.