SQLite giver flere funktioner til at indsætte, indstille og erstatte værdier i et JSON-dokument. Specifikt giver det json_insert()
, json_set()
, og json_replace()
.
Disse funktioner udfører lignende opgaver, og du kan nogle gange bruge dem i flæng til et vist punkt.
Men der er bestemt en klar forskel mellem hver funktion.
Forskellen
Følgende tabel skitserer forskellen mellem disse funktioner:
Funktion | Overskriv, hvis den allerede findes? | Opret hvis ikke eksisterer? |
---|---|---|
json_insert() | Nej | Ja |
json_replace() | Ja | Nej |
json_set() | Ja | Ja |
Så forskellen mellem disse funktioner er, hvordan de håndterer eksisterende og ikke-eksisterende nøgler/værdier.
Eksempler
Her er nogle enkle eksempler for at vise, hvordan hver funktion håndterer eksisterende og ikke-eksisterende nøgler/værdier.
Når nøglen allerede eksisterer
Her er, hvordan hver funktion håndterer opdatering af en nøgle, der allerede eksisterer:
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;
Resultat:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
Vi kan se, at json_insert()
opdaterede ikke noget, men det gjorde de to andre funktioner.
Det er en lignende ting med 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;
Resultat:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Når nøglen ikke eksisterer
Her er, hvad der sker, når nøglen ikke findes:
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;
Resultat:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
Vi kan se, at json_replace()
indsatte ikke det nye nøgle/værdi-par, men det gjorde de to andre funktioner.
Samme beskæftigelse med 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;
Resultat:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Dette kan også gøres ved at bruge [#]
sti:
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;
Resultat:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
En fordel ved at bruge [#]
er, at du ikke behøver at vide, hvor mange elementer der allerede er i arrayet.