sql >> Database >  >> RDS >> Mysql

JSON_REMOVE() – Gegevens verwijderen uit een JSON-document in MySQL

In MySQL is de JSON_REMOVE() functie verwijdert gegevens uit een JSON-document en retourneert het resultaat.

U geeft het JSON-document op als het eerste argument, gevolgd door het pad waaruit u gegevens wilt verwijderen. U kunt indien nodig meerdere paden opgeven.

Syntaxis

De syntaxis gaat als volgt:

JSON_REMOVE(json_doc, path[, path] ...)

Waar json_doc is het JSON-document, en path is het pad om gegevens van te verwijderen.

Het path argumenten worden van links naar rechts geëvalueerd. Het document dat wordt geproduceerd door een pad te evalueren, wordt de nieuwe waarde waartegen het volgende pad wordt geëvalueerd.

Het eerste argument moet een geldig JSON-document zijn, anders treedt er een fout op.

Ook het path argument moet een geldige paduitdrukking zijn en mag niet $ . zijn of bevat een * of ** wildcard, anders treedt er een fout op.

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

SELECT JSON_REMOVE('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';

Resultaat:

+------------------+
| Result           |
+------------------+
| {"a": 1, "c": 3} |
+------------------+

In dit geval hebben we het sleutel/waarde-paar verwijderd met de sleutel van b . Dit komt omdat we $.b . hebben gespecificeerd als het tweede argument.

Hier is nog een voorbeeld:

SELECT 
  JSON_REMOVE('{"Name": "Homer", "Gender": "Male", "Age": 39}', '$.Age') AS 'Result';

Resultaat:

+-------------------------------------+
| Result                              |
+-------------------------------------+
| {"Name": "Homer", "Gender": "Male"} |
+-------------------------------------+

Voorbeeld 2 – Niet-bestaand pad

Als u een pad opgeeft dat niet bestaat, wordt er niets verwijderd. Het originele JSON-document wordt zonder wijziging geretourneerd.

SELECT 
  JSON_REMOVE('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';

Resultaat:

+------------------------------+
| Result                       |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+

Voorbeeld 3 – Arrays

Hier is een voorbeeld waarin een array wordt gebruikt.

SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Result';

Resultaat:

+--------+
| Result |
+--------+
| [2, 3] |
+--------+

Arrays gebruiken nummering op basis van nul, dus in dit geval wordt het eerste element uit de array verwijderd.

Hier is nog een matrixvoorbeeld. Deze keer verwijderen we een waarde uit een geneste array.

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';

Resultaat:

+----------------+
| Result         |
+----------------+
| [1, 2, [3, 5]] |
+----------------+

Voorbeeld 4 – Meerdere paden

U kunt meer dan één pad specificeren om gegevens van meerdere plaatsen in het JSON-document te verwijderen.

Basis voorbeeld:

SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';

Resultaat:

+-----------+
| Result    |
+-----------+
| [1, 3, 4] |
+-----------+

Zoals gezegd, het path argumenten worden van links naar rechts geëvalueerd en het document dat wordt geproduceerd door een pad te evalueren, wordt de nieuwe waarde waartegen het volgende pad wordt geëvalueerd.

Daarom verwijdert het 2e padargument in dit voorbeeld een andere waarde dan het zou hebben verwijderd als het het enige padargument was geweest. Als dit het enige padargument was geweest, zou het 4 . hebben verwijderd .

Dit is wat ik bedoel:

SELECT 
  JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'One Path',
  JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Two Paths';

Resultaat:

+--------------+-----------+
| One Path     | Two Paths |
+--------------+-----------+
| [1, 2, 3, 5] | [1, 3, 4] |
+--------------+-----------+

Dat kun je dus zien als we $[3] . gebruiken als het enige pad verwijdert het 4 uit de reeks. Maar wanneer we het als het 2e pad gebruiken, verwijdert het 5 (en 4 wordt onaangeroerd gelaten).

Een ander voorbeeld, dit keer het verwijderen van waarden uit een array en een geneste array:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Result';

Resultaat:

+-------------+
| Result      |
+-------------+
| [2, [3, 5]] |
+-------------+

Dus nogmaals, ook al staat de array op positie 2 in het originele document, de eerste padwaarde ($[0] ) snijdt de buitenste array naar beneden en de binnenste array verandert in positie 1 .

Als dit je hoofd doet tollen, kun je de padargumenten altijd omwisselen, zodat de meest rechtse waarden als eerste worden verwijderd. Op die manier heeft het geen invloed op de positie van de meest linkse waarden en daarom kunt u de paden specificeren op basis van het originele JSON-document.

Dus we kunnen de vorige code veranderen in het volgende, en hetzelfde resultaat krijgen:

SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Result';

Resultaat:

+-------------+
| Result      |
+-------------+
| [2, [3, 5]] |
+-------------+

Voorbeeld 5 – Een groter JSON-document

Hier is een voorbeeld met een (iets) groter JSON-document.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Age": 39,
       "Hobbies": ["Eating", "Sleeping", "Base Jumping"]  
    }
 }';
SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';

Resultaat:

+------------------------------------------------------------------+
| Result                                                           |
+------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping"]}} |
+------------------------------------------------------------------+

  1. hoe toegang te krijgen tot de opdrachtregel voor xampp in Windows

  2. Introductie van nieuwe functie - Spotlight Cloud-rapporten

  3. SQL - Vind ontbrekende int-waarden in meestal geordende opeenvolgende reeksen

  4. Lokale en globale tijdelijke tabellen in SQL Server