Mysql
 sql >> база данни >  >> RDS >> Mysql

JSON_REMOVE() – Премахване на данни от JSON документ в MySQL

В MySQL, JSON_REMOVE() функцията премахва данни от JSON документ и връща резултата.

Предоставяте документа JSON като първи аргумент, последван от пътя за премахване на данни. Можете да предоставите няколко пътя, ако е необходимо.

Синтаксис

Синтаксисът е така:

JSON_REMOVE(json_doc, път[, път] ...)

Където json_doc е JSON документът и path е пътят за премахване на данни.

path аргументите се оценяват отляво надясно. Документът, създаден чрез оценка на един път, става новата стойност, спрямо която се оценява следващият път.

Първият аргумент трябва да е валиден JSON документ, в противен случай възникне грешка.

Също така, path Аргументът трябва да е валиден израз на пътя и не може да бъде $ или съдържа * или ** заместващ знак, в противен случай ще възникне грешка.

Пример 1 – Основна употреба

Ето пример за демонстрация.

SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') КАТО 'Резултат';

Резултат:

+-----------------+| Резултат |+------------------+| {"a":1, "c":3} |+-----------------+

В този случай премахнахме двойката ключ/стойност с ключа на b . Това е така, защото посочихме $.b като втори аргумент.

Ето още един пример:

SELECT JSON_REMOVE('{"Име":"Homer", "Пол":"Мъж", "Възраст":39}', '$.Age') КАТО 'Резултат';

Резултат:

+-------------------------------------+| Резултат |+-------------------------------------+| {"Име":"Омир", "Пол":"Мъж"} |+------------------------------ ------+

Пример 2 – Несъществуващ път

Ако посочите път, който не съществува, нищо не се премахва. Оригиналният JSON документ се връща без промяна.

SELECT JSON_REMOVE('{"Име":"Homer", "Age":39}', '$.Gender') КАТО 'Резултат';

Резултат:

+------------------------------+| Резултат |+------------------------------+| {"Възраст":39, "Име":"Омир"} |+------------------------------+ 

Пример 3 – Масиви

Ето пример за използване на масив.

ИЗБЕРЕТЕ JSON_REMOVE('[1, 2, 3]', '$[0]') КАТО 'Резултат';

Резултат:

+--------+| Резултат |+--------+| [2, 3] |+--------+

Масивите използват номериране на базата на нула, така че в този случай първият елемент се премахва от масива.

Ето още един пример за масив. Този път премахваме стойност от вложен масив.

ИЗБЕРЕТЕ JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') КАТО 'Резултат';

Резултат:

+----------------+| Резултат |+----------------+| [1, 2, [3, 5]] |+----------------+

Пример 4 – Множество пътища

Можете да посочите повече от един път за премахване на данни от множество места в JSON документа.

Основен пример:

ИЗБЕРЕТЕ JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') КАТО 'Резултат';

Резултат:

+-----------+| Резултат |+-----------+| [1, 3, 4] |+----------+

Както споменахме, path Аргументите се оценяват отляво надясно и документът, създаден чрез оценка на един път, става новата стойност, спрямо която се оценява следващият път.

Следователно в този пример вторият аргумент за път премахва стойност, различна от тази, която би премахнал, ако беше единственият аргумент за път. Ако това беше единственият аргумент за пътя, той щеше да премахне 4 .

Ето какво имам предвид:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') КАТО 'Един път', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') КАТО 'Два пътя';

Резултат:

<пред>+--------------+-----------+| Един път | Два пътя |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+----------+

Така че можете да видите това, когато използваме $[3] като единствен път, премахва 4 от масива. Но когато го използваме като 2-ри път, той премахва 54 остава недокоснат).

Друг пример, този път изтриване на стойности от масив и вложен масив:

ИЗБЕРЕТЕ JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') КАТО 'Резултат';

Резултат:

+------------+| Резултат |+------------+| [2, [3, 5]] |+------------+

Така че отново, въпреки че масивът е на позиция 2 в оригиналния документ, първата стойност на пътя ($[0] ) отрязва външния масив, а вътрешният се променя на позиция 1 .

Ако това ви завърти главата, винаги можете да размените аргументите на пътя, така че най-десните стойности да бъдат премахнати първи. По този начин това няма да повлияе на позицията на най-левите стойности и следователно можете да посочите пътищата въз основа на оригиналния JSON документ.

Така че можем да променим предишния код на следния и да получим същия резултат:

ИЗБЕРЕТЕ JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') КАТО 'Резултат';

Резултат:

+------------+| Резултат |+------------+| [2, [3, 5]] |+------------+

Пример 5 – По-голям JSON документ

Ето пример с (малко) по-голям JSON документ.

SET @data ='{ "Person":{ "Име":"Homer", "Age":39, "Хобита":["Хранене", "Спане", "Скачане на база"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') КАТО 'Резултат';

Резултат:

+------------------------------------------------------- --------------------+| Резултат |+-------------------------------------------------------- -------------------+| {"Човек":{"Име":"Омир", "Хобита":["Хранене", "Спане"]}} |+------------------- -----------------------------------------------+ 
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL InnoDB Cluster 8.0 - Пълен преглед на операцията:Част втора

  2. Как да копирам таблица в MySQL

  3. Ускоряване на преброяването на редове в MySQL

  4. Как мога да проверя типа на MySQL двигателя за конкретна таблица?

  5. MySQL SELECT DISTINCT множество колони