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.