SQLite
 sql >> база данни >  >> RDS >> SQLite

JSON_INSERT() срещу JSON_SET() срещу JSON_REPLACE() в SQLite

SQLite предоставя няколко функции за вмъкване, настройка и замяна на стойности в JSON документ. По-конкретно, той предоставя json_insert() , json_set() и json_replace() .

Тези функции изпълняват подобни задачи и понякога можете да ги използвате взаимозаменяемо до определен момент.

Но определено има ясна разлика между всяка функция.

Разликата

Следната таблица очертава разликата между тези функции:

Функция Да се ​​презапише, ако вече съществува? Създаване, ако не съществува?
json_insert() Не Да
json_replace() Да Не
json_set() Да Да

Така че разликата между тези функции е в начина, по който се справят със съществуващи и несъществуващи ключове/стойности.

Примери

Ето няколко прости примера, които демонстрират как всяка функция се справя със съществуващи и несъществуващи ключове/стойности.

Когато ключът вече съществува

Ето как всяка функция се справя с актуализирането на ключ, който вече съществува:

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; 

Резултат:

+------------+--------------+----------+| json_insert | json_replace | json_set |+------------+--------------+----------+| {"a":1} | {"a":2} | {"a":2} |+------------+--------------+---------+ 

Можем да видим, че json_insert() не актуализира нищо, но другите две функции го направиха.

Подобно е нещо с масивите:

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; 

Резултат:

+------------+--------------+----------+| json_insert | json_replace | json_set |+------------+--------------+----------+| [1,2,3] | [1,4,3] | [1,4,3] |+------------+--------------+---------+ 

Когато ключът не съществува

Ето какво се случва, когато ключът не съществува:

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; 

Резултат:

+--------------+--------------+-------------- +| json_insert | json_replace | json_set |+---------------+--------------+--------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} |+--------------+--------------+---- -----------+

Можем да видим, че json_replace() не вмъкна новата двойка ключ/стойност, но другите две функции го направиха.

Същата работа с масивите:

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; 

Резултат:

+------------+--------------+-----------+| json_insert | json_replace | json_set |+------------+--------------+-----------+| [1,2,3,4] | [1,2,3] | [1,2,3,4] |+------------+--------------+---------- -+

Това може да стане и с помощта на [#] път:

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; 

Резултат:

+------------+--------------+-----------+| json_insert | json_replace | json_set |+------------+--------------+-----------+| [1,2,3,4] | [1,2,3] | [1,2,3,4] |+------------+--------------+--------- -+

Едно предимство от използването на [#] е, че не е нужно да знаете колко елемента вече има в масива.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Android SQLiteOpenHelper:Защо методът onCreate() не се извиква?

  2. Как да актуализирате/изтриете с елементи от две различни таблици SQLite

  3. Sqlite3 не вмъква няколко реда по ред

  4. Изключение на нулев указател при извикване на getReadableDatabase()

  5. SQLiteDiskIOException:код на грешка 10:грешка в дисковия вход/изход се връща на ICS и Samsung Nexus на DROP TABLE