sql >> Database >  >> RDS >> Mysql

JSON_ARRAY_APPEND() – Waarden toevoegen aan een JSON-array in MySQL

Wanneer u JSON-documenten gebruikt met MySQL, kunt u de JSON_ARRAY_APPEND() gebruiken functie om nieuwe waarden aan een array toe te voegen.

De manier waarop het werkt, is dat u het JSON-document als het eerste argument opgeeft en dat vervolgens volgt met het pad om aan toe te voegen, gevolgd door de waarde om toe te voegen.

In MySQL 5.7 heette deze functie JSON_APPEND() maar die naam wordt niet langer ondersteund.

Syntaxis

De syntaxis gaat als volgt:

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Waar:

  • json_doc is het JSON-document.
  • path is het pad van het element waaraan de nieuwe waarde moet worden toegevoegd.
  • val is de nieuwe waarde die wordt toegevoegd.

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

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Dus het derde argument wordt aan de array toegevoegd. In dit geval gebruik ik $ voor het pad. Dit is een synoniem voor het JSON-document, dus de waarde wordt toegevoegd aan de array op het hoogste niveau (wat in dit geval de enige array is).

Voorbeeld 2 – Geneste array

Hier is een voorbeeld van het toevoegen van een waarde aan een array die in een andere array is genest.

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

Resultaat:

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

Dus hier gebruik ik $[2] als het pad. Dit specificeert de array bij het derde element (arrays gebruiken op nul gebaseerde nummering, dus de telling begint bij nul).

Als er bij dat element nog geen array was, wordt er een nieuwe array gemaakt.

Zoals dit:

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

Resultaat:

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

Voorbeeld 3 – Een groter JSON-document

In dit voorbeeld wordt een (iets) groter JSON-document gebruikt. Dit laat zien hoe het pad verandert, afhankelijk van waar de array zich in het document bevindt.

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

Resultaat:

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

En net als in het vorige voorbeeld kunnen we, indien nodig, ook een nieuwe, geneste array maken:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Resultaat:

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


  1. Fout bij gebruik behalve in een query

  2. 3 manieren om het gegevenstype van een kolom in SQL Server (T-SQL) te krijgen

  3. Inleiding tot SQL-groepering en totalen

  4. STRING_SPLIT() in SQL Server 2016:vervolg #1