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.