In MySQL, ci sono una serie di funzioni che ti aiutano a lavorare con i documenti JSON. Questi includono il JSON_SET()
, JSON_INSERT()
e JSON_REPLACE()
funzioni.
Queste tre funzioni sono correlate, ma differiscono leggermente.
Sintassi
Innanzitutto, ecco la sintassi per tutte e tre le funzioni:
JSON_SET(json_doc, path, val[, path, val] ...) JSON_INSERT(json_doc, path, val[, path, val] ...) JSON_REPLACE(json_doc, path, val[, path, val] ...)
Quindi tutte e tre le funzioni accettano gli stessi argomenti. Ecco a cosa servono questi argomenti:
json_doc
è il documento JSON.path
è il percorso dell'elemento per il quale inserire dati o aggiornare il valore in.val
è il nuovo valore.
La differenza
Ecco la differenza tra queste funzioni:
JSON_SET()
sostituisce i valori esistenti e aggiunge valori inesistenti.JSON_INSERT()
inserisce i valori senza sostituire quelli esistenti.JSON_REPLACE()
sostituisce solo i valori esistenti.
Quindi, in pratica, quello che usi dipende dal fatto che tu stia aggiornando un valore esistente o inserendone uno nuovo (sebbene JSON_SET()
fa entrambe le cose).
Esempio 1:inserire un valore
Ecco degli esempi per dimostrare la differenza tra queste tre funzioni.
JSON_SET()
Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Risultato:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Quindi ha funzionato perfettamente.
JSON_INSERT()
Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Risultato:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Esattamente lo stesso risultato di JSON_SET()
.
JSON_REPLACE()
Ecco cosa succede se proviamo a inserire un nuovo valore usando JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
In questo caso, il nuovo valore non è stato inserito. Il documento JSON originale viene restituito invariato. Questo perché questa funzione sostituisce solo i valori esistenti, non ne inserisce di nuovi.
Esempio 2:aggiornamento di un valore esistente
Ora per aggiornare i valori esistenti.
JSON_SET()
Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_SET()
:
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Quindi, ancora una volta, ha funzionato perfettamente. Abbiamo aggiornato con successo la seconda coppia chiave/valore con il nuovo valore.
JSON_INSERT()
Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_INSERT()
:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
In questo caso il valore esistente non è stato aggiornato. Il documento JSON viene restituito invariato. Questo perché JSON_INSERT()
la funzione inserisce solo nuovi valori, non aggiorna quelli esistenti.
JSON_REPLACE()
Ecco cosa succede se proviamo ad aggiornare un valore esistente utilizzando JSON_REPLACE()
:
SELECT JSON_REPLACE('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Si aggiorna perfettamente.