In MySQL, il JSON_SET()
la funzione inserisce o aggiorna i valori 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. Puoi fornire più coppie percorso/valore se devi aggiornare più valori.
Sintassi
La sintassi è questa:
JSON_SET(json_doc, path, val[, path, val] ...)
Dove:
json_doc
è il documento JSON.path
è il percorso dell'elemento per il quale inserire dati o aggiornare il valore in.val
è il nuovo valore.
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.
Si verifica un errore se il primo argomento non è un documento JSON valido o se un argomento del percorso non è un'espressione del percorso valida o contiene un *
o **
carattere jolly.
Esempio 1:inserire un valore
Ecco un esempio per dimostrare come inserire un valore utilizzando questa funzione.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Risultato:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
In questo caso, il 3° argomento viene inserito nell'array nel percorso specificato. Uso $.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_SET('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Risultato:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Esempio 2:aggiornamento di un valore
L'esempio precedente ha inserito un valore. Questo esempio aggiorna un valore esistente.
SELECT JSON_SET('{"a": 1, "b": 2}', '$.b', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 3} | +------------------+
Ecco un altro esempio:
SELECT JSON_SET('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Risultato:
+------------------------------------+ | Result | +------------------------------------+ | {"Name": "Bart", "Gender": "Male"} | +------------------------------------+
Esempio 3 – Matrici
È possibile inserire valori in una matrice utilizzando un percorso oltre la fine della matrice esistente. Esempio:
SELECT JSON_SET('[1, 2, 3]', '$[3]', 4) AS 'Result';
Risultato:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Tuttavia, se utilizzi un percorso già esistente nell'array, il valore verrà aggiornato:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Result';
Risultato:
+-----------+ | Result | +-----------+ | [1, 4, 3] | +-----------+
Se il valore esistente non è una matrice, viene eseguito il wrapping automaticamente come matrice, quindi esteso con il nuovo valore. Esempio:
SELECT JSON_SET('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Risultato:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Esempio 4 – Valori multipli
È possibile inserire/aggiornare più valori contemporaneamente. Aggiungi semplicemente ogni coppia chiave/valore separata da una virgola. Esempio:
SELECT JSON_SET('{"a": 1, "b": 2, "c": 3}', '$.a', 9, '$.c', 'Bart') AS 'Result';
Risultato:
+-------------------------------+ | Result | +-------------------------------+ | {"a": 9, "b": 2, "c": "Bart"} | +-------------------------------+
Esempio 5: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_SET(@data, '$.Person.Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';
Risultato:
+-----------------------------------------------------------------+ | Result | +-----------------------------------------------------------------+ | {"Person": {"Name": "Bart", "Hobbies": ["Eating", "Mischief"]}} | +-----------------------------------------------------------------+
Vedi anche JSON_INSERT()
per inserire valori senza sostituire valori esistenti e JSON_REPLACE()
per sostituire solo i valori esistenti.