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"]}} | +--------------------------------------------------------------------------------+