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