В MySQL има редица функции, които да ви помогнат да работите с JSON документи. Те включват JSON_SET()
, JSON_INSERT()
и JSON_REPLACE()
функции.
Тези три функции са свързани, но се различават леко.
Синтаксис
Първо, ето синтаксиса и за трите функции:
JSON_SET(json_doc, път, val[, път, val] ...)JSON_INSERT(json_doc, път, val[, път, val] ...)JSON_REPLACE(json_doc, път, val[, път, val] ...)
Така че и трите функции приемат едни и същи аргументи. Ето за какво са тези аргументи:
json_doc
е JSON документът.path
е пътят на елемента, за който да се вмъкнат данни или да се актуализира стойността в.val
е новата стойност.
Разликата
Ето разликата между тези функции:
JSON_SET()
замества съществуващите стойности и добавя несъществуващи стойности.JSON_INSERT()
вмъква стойности, без да заменя съществуващите стойности.JSON_REPLACE()
заменя само съществуващите стойности.
Така че основно кой от тях ще използвате зависи от това дали актуализирате съществуваща стойност или вмъквате нова (въпреки че JSON_SET()
прави и двете).
Пример 1 – Вмъкване на стойност
Ето примери за демонстриране на разликата между тези три функции.
JSON_SET()
Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на JSON_SET()
:
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';
Резултат:
+-------------------------+| Резултат |+-------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+предварително>Така че работи перфектно.
JSON_INSERT()
Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на
JSON_INSERT()
:SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';Резултат:
+-------------------------+| Резултат |+-------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+предварително>Точно същият резултат като при
JSON_SET()
.JSON_REPLACE()
Ето какво се случва, ако се опитаме да вмъкнем нова стойност с помощта на
JSON_REPLACE()
:SELECT JSON_REPLACE('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';Резултат:
+-----------------+| Резултат |+------------------+| {"a":1, "b":2} |+-----------------+В този случай новата стойност не е въведена. Оригиналният JSON документ се връща непроменен. Това е така, защото тази функция заменя само съществуващите стойности – не вмъква нови.
Пример 2 – Актуализиране на съществуваща стойност
Сега за актуализиране на съществуващи стойности.
JSON_SET()
Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на
JSON_SET()
:SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';Резултат:
+-----------------+| Резултат |+------------------+| {"a":1, "b":3} |+-----------------+Така че отново работи перфектно. Успешно актуализирахме втората двойка ключ/стойност с новата стойност.
JSON_INSERT()
Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на
JSON_INSERT()
:SELECT JSON_INSERT('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';Резултат:
+-----------------+| Резултат |+------------------+| {"a":1, "b":2} |+-----------------+В този случай съществуващата стойност не е актуализирана. JSON документът се връща непроменен. Това е така, защото
JSON_INSERT()
функцията вмъква само нови стойности – не актуализира съществуващите.JSON_REPLACE()
Ето какво се случва, ако се опитаме да актуализираме съществуваща стойност с помощта на
JSON_REPLACE()
:SELECT JSON_REPLACE('{"a":1, "b":2}', '$.b', 3) КАТО 'Резултат';Резултат:
+-----------------+| Резултат |+------------------+| {"a":1, "b":3} |+-----------------+Актуализира се перфектно.