SQLite udostępnia kilka funkcji do wstawiania, ustawiania i zastępowania wartości w dokumencie JSON. W szczególności zapewnia json_insert()
, json_set()
i json_replace()
.
Te funkcje wykonują podobne zadania i czasami można ich używać zamiennie do pewnego momentu.
Ale zdecydowanie istnieje wyraźna różnica między każdą funkcją.
Różnica
Poniższa tabela przedstawia różnice między tymi funkcjami:
Funkcja | Zastąpić, jeśli już istnieje? | Utworzyć, jeśli nie istnieje? |
---|---|---|
json_insert() | Nie | Tak |
json_replace() | Tak | Nie |
json_set() | Tak | Tak |
Tak więc różnica między tymi funkcjami polega na tym, jak radzą sobie z istniejącymi i nieistniejącymi kluczami/wartościami.
Przykłady
Oto kilka prostych przykładów pokazujących, jak każda funkcja radzi sobie z istniejącymi i nieistniejącymi kluczami/wartościami.
Kiedy klucz już istnieje
Oto jak każda funkcja radzi sobie z aktualizacją klucza, który już istnieje:
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;
Wynik:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
Widzimy, że json_insert()
niczego nie aktualizował, ale pozostałe dwie funkcje tak.
Podobnie jest z tablicami:
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;
Wynik:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
Kiedy klucz nie istnieje
Oto, co się dzieje, gdy klucz nie istnieje:
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;
Wynik:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
Widzimy, że json_replace()
nie wstawił nowej pary klucz/wartość, ale pozostałe dwie funkcje tak.
To samo dotyczy tablic:
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;
Wynik:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Można to również zrobić za pomocą [#]
ścieżka:
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;
Wynik:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
Jedna korzyść z używania [#]
jest to, że nie musisz wiedzieć, ile elementów jest już w tablicy.