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