SQLite poskytuje několik funkcí pro vkládání, nastavení a nahrazování hodnot v dokumentu JSON. Konkrétně poskytuje json_insert()
, json_set()
a json_replace()
.
Tyto funkce provádějí podobné úkoly a někdy je můžete do určitého bodu používat zaměnitelně.
Ale mezi každou funkcí je určitě jasný rozdíl.
Rozdíl
Následující tabulka popisuje rozdíl mezi těmito funkcemi:
Funkce | Přepsat, pokud již existuje? | Vytvořit, pokud neexistuje? |
---|---|---|
json_insert() | Ne | Ano |
json_replace() | Ano | Ne |
json_set() | Ano | Ano |
Rozdíl mezi těmito funkcemi je tedy v tom, jak nakládají s existujícími a neexistujícími klíči/hodnotami.
Příklady
Zde je několik jednoduchých příkladů, které demonstrují, jak každá funkce pracuje s existujícími a neexistujícími klíči/hodnotami.
Když klíč již existuje
Zde je návod, jak se každá funkce zabývá aktualizací klíče, který již existuje:
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;
Výsledek:
+-------------+--------------+----------+| json_insert | json_replace | json_set |+-------------+--------------+----------+| {"a":1} | {"a":2} | {"a":2} |+-------------+--------------+----------+Vidíme, že
json_insert()
nic neaktualizoval, ale ostatní dvě funkce ano.S poli je to podobné:
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;
Výsledek:
+-------------+--------------+----------+| json_insert | json_replace | json_set |+-------------+--------------+----------+| [1,2,3] | [1,4,3] | [1,4,3] |+-------------+--------------+----------+Když klíč neexistuje
Co se stane, když klíč neexistuje:
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;
Výsledek:
+---------------+--------------+--------------- +| json_insert | json_replace | json_set |+---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} |+---------------+--------------+---- -----------+Vidíme, že
json_replace()
nevložil nový pár klíč/hodnota, ale ostatní dvě funkce ano.Stejné řešení s poli:
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;
Výsledek:
+-------------+--------------+-----------+| json_insert | json_replace | json_set |+-------------+--------------+-----------+| [1,2,3,4] | [1,2,3] | [1,2,3,4] |+-------------+--------------+----------- -+To lze také provést pomocí
[#]
cesta: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;
Výsledek:
+-------------+--------------+-----------+| json_insert | json_replace | json_set |+-------------+--------------+-----------+| [1,2,3,4] | [1,2,3] | [1,2,3,4] |+-------------+--------------+----------- -+Jedna výhoda použití
[#]
je, že nepotřebujete vědět, kolik prvků je již v poli.