sql >> Databasteknik >  >> RDS >> Mysql

JSON_ARRAY_APPEND() – Lägg till värden till en JSON-array i MySQL

När du använder JSON-dokument med MySQL kan du använda JSON_ARRAY_APPEND() funktion för att lägga till nya värden till en array.

Så det fungerar är att du tillhandahåller JSON-dokumentet som det första argumentet och sedan följer det upp med sökvägen att lägga till, följt av värdet som ska läggas till.

I MySQL 5.7 kallades denna funktion JSON_APPEND() men det namnet stöds inte längre.

Syntax

Syntaxen ser ut så här:

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

Var:

  • json_doc är JSON-dokumentet.
  • path är sökvägen till elementet som det nya värdet ska läggas till.
  • val är det nya värdet som kommer att läggas till.

Väg-värdeparen utvärderas från vänster till höger. Dokumentet som skapas genom att utvärdera ett par blir det nya värdet mot vilket nästa par utvärderas.

Exempel 1 – Grundläggande användning

Här är ett exempel att visa.

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

Resultat:

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

Så det 3:e argumentet läggs till i arrayen. I det här fallet använder jag $ för stigen. Detta är en synonym för JSON-dokumentet, så värdet läggs till i toppnivåmatrisen (som i det här fallet råkar vara den enda matrisen).

Exempel 2 – Kapslad array

Här är ett exempel på hur du lägger till ett värde till en array som är kapslad i en annan array.

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

Resultat:

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

Så här använder jag $[2] som vägen. Detta anger matrisen vid det tredje elementet (matriser använder nollbaserad numrering, så räkningen börjar på noll).

Om det inte redan fanns en array vid det elementet skapas en ny array.

Så här:

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

Resultat:

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

Exempel 3 – Ett större JSON-dokument

Det här exemplet använder ett (något) större JSON-dokument. Detta visar hur sökvägen ändras beroende på var arrayen är i dokumentet.

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

Resultat:

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

Och precis som i det föregående exemplet kan vi också skapa en ny, kapslad array, om det behövs:

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

Resultat:

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


  1. MySQL LEAST() Funktion – Hitta det minsta argumentet i en lista med argument

  2. Postgres kunde inte ansluta till servern

  3. hur man hittar index på en tabell i oracle

  4. MAX() vs GREATEST() i MySQL:Vad är skillnaden?