SQLite tillhandahåller flera funktioner för att infoga, ställa in och ersätta värden i ett JSON-dokument. Specifikt tillhandahåller den json_insert()
, json_set()
, och json_replace()
.
Dessa funktioner utför liknande uppgifter, och du kan ibland använda dem omväxlande till en viss punkt.
Men det är definitivt en tydlig skillnad mellan varje funktion.
Skillnaden
Följande tabell beskriver skillnaden mellan dessa funktioner:
Funktion | Skriv över om det redan finns? | Skapa om det inte finns? |
---|---|---|
json_insert() | Nej | Ja |
json_replace() | Ja | Nej |
json_set() | Ja | Ja |
Så skillnaden mellan dessa funktioner ligger i hur de hanterar befintliga och icke-existerande nycklar/värden.
Exempel
Här är några enkla exempel för att visa hur varje funktion hanterar befintliga och icke-existerande nycklar/värden.
När nyckeln redan finns
Så här hanterar varje funktion uppdatering av en nyckel som redan finns:
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 att json_insert()
uppdaterade ingenting, men de andra två funktionerna gjorde det.
Det är en liknande sak med arrayer:
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 nyckeln inte finns
Så här händer när nyckeln inte finns:
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 att json_replace()
infogade inte det nya nyckel/värdeparet, men det gjorde de andra två funktionerna.
Samma affär med arrayer:
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] | +-------------+--------------+-----------+
Detta kan också göras med [#]
sökväg:
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 fördel med att använda [#]
är att du inte behöver veta hur många element som redan finns i arrayen.