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] |+------------+--------------+--------- -+Едно предимство от използването на
[#]
е, че не е нужно да знаете колко елемента вече има в масива.