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

JSON_INSERT() – Inserisci valori in un documento JSON in MySQL

In MySQL, il JSON_INSERT() la funzione inserisce un valore in un documento JSON e restituisce il risultato.

Fornisci il documento JSON come primo argomento, seguito dal percorso in cui inserire, seguito dal valore da inserire.

Sintassi

La sintassi è questa:

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

Dove:

  • json_doc è il documento JSON.
  • path è il percorso dell'elemento in cui inserire il nuovo valore.
  • val è il nuovo valore che verrà inserito.

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_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';

Risultato:

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

Quindi il 3° argomento viene inserito nell'array nel percorso specificato. In questo caso, utilizzo $.c per il percorso e 3 per il valore da inserire. Ciò si traduce in una coppia chiave/valore di "c": 3 .

Ecco un altro esempio:

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

Risultato:

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

Esempio 2:tentativo di sovrascrivere un percorso esistente

Una coppia percorso-valore per un percorso esistente nel documento viene ignorata e non sovrascrive il valore del documento esistente.

Quindi, se modifichiamo l'esempio precedente per inserire un valore in Name (che già esiste), non avviene alcun inserimento:

SELECT 
  JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';

Risultato:

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

Esempio 3 – Matrici

È possibile inserire valori in una matrice utilizzando un percorso oltre la fine della matrice esistente. Esempio:

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

Risultato:

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

Tuttavia, se utilizzi un percorso già esistente nell'array, l'array rimarrà invariato:

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

Risultato:

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

Se il valore esistente non è una matrice, viene eseguito il wrapping automaticamente come matrice, quindi esteso con il nuovo valore. Esempio:

SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';

Risultato:

+-----------------------+
| Result                |
+-----------------------+
| [{"a": 1, "b": 2}, 3] |
+-----------------------+

Ma ancora una volta, se provi a inserire un valore in un percorso già esistente, il documento JSON rimane invariato:

SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';

Risultato:

+------------------+
| Result           |
+------------------+
| {"a": 1, "b": 2} |
+------------------+

Esempio 4:un documento JSON più grande

Ecco un esempio con un documento JSON (leggermente) più grande.

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

Risultato:

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

Vedi anche JSON_ARRAY_INSERT() e JSON_ARRAY_APPEND() se è necessario inserire o aggiungere dati in un array JSON.