Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_ARRAY_APPEND() – Aggiunge valori a un array JSON in MySQL

Quando si utilizzano documenti JSON con MySQL, è possibile utilizzare JSON_ARRAY_APPEND() funzione per aggiungere nuovi valori a un array.

Il modo in cui funziona è fornire il documento JSON come primo argomento, quindi seguirlo con il percorso a cui aggiungere, seguito dal valore da aggiungere.

In MySQL 5.7, questa funzione era chiamata JSON_APPEND() ma quel nome non è più supportato.

Sintassi

La sintassi è questa:

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

Dove:

  • json_doc è il documento JSON.
  • path è il percorso dell'elemento a cui aggiungere il nuovo valore.
  • val è il nuovo valore che verrà aggiunto.

Le coppie valore percorso vengono valutate da sinistra a destra. Il documento prodotto dalla valutazione di una coppia diventa il nuovo valore rispetto al quale viene valutata la coppia successiva.

Esempio 1 – Utilizzo di base

Ecco un esempio da dimostrare.

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

Risultato:

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

Quindi il 3° argomento viene aggiunto all'array. In questo caso, utilizzo $ per il percorso. Questo è un sinonimo del documento JSON, quindi il valore viene aggiunto all'array di livello superiore (che in questo caso è l'unico array).

Esempio 2 – Array nidificato

Ecco un esempio di aggiunta di un valore a una matrice nidificata all'interno di un'altra matrice.

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

Risultato:

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

Quindi qui uso $[2] come il sentiero. Questo specifica l'array al terzo elemento (gli array usano la numerazione in base zero, quindi il conteggio inizia da zero).

Se non c'era già un array in quell'elemento, viene creato un nuovo array.

In questo modo:

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

Risultato:

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

Esempio 3:un documento JSON più grande

Questo esempio usa un documento JSON (leggermente) più grande. Questo dimostra come il percorso cambia a seconda di dove si trova l'array all'interno del documento.

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

Risultato:

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

E proprio come nell'esempio precedente, possiamo anche creare un nuovo array nidificato, se necessario:

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

Risultato:

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