В MySQL, JSON_ARRAY_INSERT() функцията се използва за вмъкване на нова стойност в масив.
Предоставяте документа JSON като първи аргумент, последван от пътя за вмъкване, последван от стойността за вмъкване.
Синтаксис
Синтаксисът е така:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Къде:
json_docе JSON документът.pathе пътят на елемента, в който да се вмъкне новата стойност.valе новата стойност, която ще бъде вмъкната.
Двойките път-стойност се оценяват отляво надясно. Документът, създаден чрез оценка на една двойка, става новата стойност, спрямо която се оценява следващата двойка.
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT JSON_ARRAY_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Резултат:
+--------------+ | Result | +--------------+ | [1, 4, 2, 3] | +--------------+
Така че третият аргумент се вмъква в масива по посочения път. В този случай използвам $[1] за пътя, който се отнася до втория елемент (JSON масивите използват номериране на база нула – номерирането започва от 0 ).
Пример 2 – Вложен масив
Ето пример за вмъкване на стойност в масив, който е вложен в друг масив.
SELECT JSON_ARRAY_INSERT('[1, 2, [3, 4]]', '$[2][1]', 5) AS 'Result';
Резултат:
+-------------------+ | Result | +-------------------+ | [1, 2, [3, 5, 4]] | +-------------------+
Така че тук използвам $[2][1] като пътеката. [2] се отнася до 3-тия елемент от външния масив. [1] се отнася до 2-ри елемент от вложения масив.
Пример 3 – По-голям JSON документ
Този пример използва (малко) по-голям JSON документ. Това показва как пътят се променя в зависимост от това къде се намира масивът в документа.
SET @data = '{
"Person": {
"Name": "Homer",
"Hobbies": ["Eating", "Sleeping"]
}
}';
SELECT JSON_ARRAY_INSERT(@data, '$.Person.Hobbies[1]', "Base Jumping") AS 'Result';
Резултат:
+----------------------------------------------------------------------------------+
| Result |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Base Jumping", "Sleeping"]}} |
+----------------------------------------------------------------------------------+