sql >> Databáze >  >> RDS >> SQLite

JSON_INSERT() vs JSON_SET() vs JSON_REPLACE() v SQLite

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.


  1. Vytvoření globální dočasné tabulky v Oracle

  2. SQL SELECT AND operátor

  3. IS NOT NULL test pro záznam nevrací hodnotu TRUE, když je nastavena proměnná

  4. ORA-08177:Nelze serializovat přístup pro tuto transakci