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

JSON_REPLACE() – Sostituisci i valori in un documento JSON in MySQL

In MySQL, il JSON_REPLACE() La funzione sostituisce i valori in un documento JSON e restituisce il risultato.

Fornisci il documento JSON come primo argomento, seguito dal percorso in cui sostituire i dati, seguito dal valore con cui sostituire il valore esistente.

È possibile sostituire i dati in più punti del documento, se necessario. Per fare ciò, fornisci semplicemente più coppie percorso/valore come richiesto.

Sintassi

La sintassi è questa:

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

Dove json_doc è il documento JSON, path è il percorso in cui sostituire i dati e val è il nuovo valore per sostituire il valore esistente.

Le coppie percorso/valore 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.

Se la coppia percorso/valore non esiste nel documento JSON, viene ignorata e non ha alcun effetto.

Il primo argomento deve essere un documento JSON valido, altrimenti si verifica un errore.

Inoltre, il path argomento deve essere un'espressione di percorso valida e non può contenere un * o ** carattere jolly, altrimenti si verificherà un errore.

Esempio 1 – Utilizzo di base

Ecco un esempio da dimostrare.

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

Risultato:

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

In questo caso, abbiamo sostituito b 's valore con 9 . Questo perché abbiamo specificato $.b come secondo argomento e 9 come terzo.

Ecco un altro esempio:

SELECT 
  JSON_REPLACE('{"Name": "Bart", "Age": 10}', '$.Name', 'Nelson - Ha Ha!') AS 'Result';

Risultato:

+----------------------------------------+
| Result                                 |
+----------------------------------------+
| {"Age": 10, "Name": "Nelson - Ha Ha!"} |
+----------------------------------------+

Esempio 2 – Percorso inesistente

Se specifichi un percorso che non esiste, nulla viene rimosso. Il documento JSON originale viene restituito senza modifiche.

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

Risultato:

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

Esempio 3 – Matrici

Ecco un esempio che utilizza un array.

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

Risultato:

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

Le matrici utilizzano la numerazione in base zero, quindi in questo caso il primo elemento viene sostituito.

Ecco un altro esempio di array. Questa volta sostituiamo un valore in un array nidificato.

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

Risultato:

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

Esempio 4 – Percorsi multipli

Puoi specificare più di un percorso per sostituire i dati in più posizioni all'interno del documento JSON.

Esempio di base:

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

Risultato:

+------------------+
| Result           |
+------------------+
| [1, 9, 3, 22, 5] |
+------------------+

Esempio 5:un documento JSON più grande

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

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

Risultato:

+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Age": 10, "Name": "Bart", "Hobbies": ["Eating", "Base Jumping"]}} |
+--------------------------------------------------------------------------------+