В 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"]}} | +----------------------------------------------------------------------------------+