В MySQL, JSON_INSERT()
функцията вмъква стойност в JSON документ и връща резултата.
Предоставяте документа JSON като първи аргумент, последван от пътя за вмъкване, последван от стойността за вмъкване.
Синтаксис
Синтаксисът е така:
JSON_INSERT(json_doc, път, val[, път, val] ...)
Къде:
json_doc
е JSON документът.path
е пътят на елемента, в който да се вмъкне новата стойност.val
е новата стойност, която ще бъде вмъкната.
Двойките път-стойност се оценяват отляво надясно. Документът, създаден чрез оценка на една двойка, става новата стойност, спрямо която се оценява следващата двойка.
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) КАТО 'Резултат';
Резултат:
+-------------------------+| Резултат |+-------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+предварително>Така че третият аргумент се вмъква в масива по посочения път. В този случай използвам
$.c
за пътя и3
за стойността, която трябва да се вмъкне. Това води до двойка ключ/стойност от"c": 3
.Ето още един пример:
SELECT JSON_INSERT('{"Име":"Homer", "Пол":"Мъж"}', '$.Age', 39) КАТО 'Резултат';Резултат:
+------------------------------------------------------- --+| Резултат |+-------------------------------------------------------- -+| {"Възраст":39, "Име":"Омир", "Пол":"Мъж"} |+------------------------- -----------------------+Пример 2 – Опит за презаписване на съществуващ път
Двойка път-стойност за съществуващ път в документа се игнорира и не презаписва стойността на съществуващия документ.
Така че, ако модифицираме предишния пример, за да вмъкнем стойност в
Name
(което вече съществува), не се извършва вмъкване:SELECT JSON_INSERT('{"Име":"Homer", "Пол":"Мъж"}', '$.Name', "Bart") КАТО 'Резултат';Резултат:
+-------------------------------------+| Резултат |+-------------------------------------+| {"Име":"Омир", "Пол":"Мъж"} |+------------------------------ ------+Пример 3 – Масиви
Можете да вмъквате стойности в масив, като използвате път след края на съществуващия масив. Пример:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) КАТО 'Резултат';Резултат:
+--------------+| Резултат |+--------------+| [1, 2, 3, 4] |+--------------+Въпреки това, ако използвате път, който вече съществува в масива, масивът ще остане непроменен:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) КАТО 'Резултат';Резултат:
+-----------+| Резултат |+-----------+| [1, 2, 3] |+----------+Ако съществуващата стойност не е масив, тя се обвива автоматично като масив, след което се разширява с новата стойност. Пример:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[2]', 3) КАТО 'Резултат';Резултат:
<пред>+-----------------------+| Резултат |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+
Но още веднъж, ако се опитате да вмъкнете стойност в път, който вече съществува, JSON документът остава непроменен:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) КАТО 'Резултат';
Резултат:
+-----------------+| Резултат |+------------------+| {"a":1, "b":2} |+-----------------+
Пример 4 – По-голям JSON документ
Ето пример с (малко) по-голям JSON документ.
SET @data ='{ "Person":{ "Име":"Homer", "Хобита":["Хранене", "Спане"] } }';SELECT JSON_INSERT(@data, '$.Person. Хобита[2]“, „Бейс скокове“) КАТО „Резултат“;
Резултат:
+------------------------------------------------------- ------------------------------------+| Резултат |+-------------------------------------------------------- ----------------------------------+| {"Човек":{"Име":"Омир", "Хобита":["Хранене", "Спане", "Скачане на база"]}} |+-------------- -------------------------------------------------- ------------------+
Вижте също JSON_ARRAY_INSERT()
и JSON_ARRAY_APPEND()
ако трябва да вмъкнете или добавите данни в JSON масив.