In MySQL, il JSON_INSERT()
la funzione inserisce un valore 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.
Sintassi
La sintassi è questa:
JSON_INSERT(json_doc, path, val[, path, val] ...)
Dove:
json_doc
è il documento JSON.path
è il percorso dell'elemento in cui inserire il nuovo valore.val
è il nuovo valore che verrà inserito.
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.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$.c', 3) AS 'Result';
Risultato:
+--------------------------+ | Result | +--------------------------+ | {"a": 1, "b": 2, "c": 3} | +--------------------------+
Quindi il 3° argomento viene inserito nell'array nel percorso specificato. In questo caso, utilizzo $.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_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Age', 39) AS 'Result';
Risultato:
+------------------------------------------------+ | Result | +------------------------------------------------+ | {"Age": 39, "Name": "Homer", "Gender": "Male"} | +------------------------------------------------+
Esempio 2:tentativo di sovrascrivere un percorso esistente
Una coppia percorso-valore per un percorso esistente nel documento viene ignorata e non sovrascrive il valore del documento esistente.
Quindi, se modifichiamo l'esempio precedente per inserire un valore in Name
(che già esiste), non avviene alcun inserimento:
SELECT JSON_INSERT('{"Name": "Homer", "Gender": "Male"}', '$.Name', "Bart") AS 'Result';
Risultato:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "Gender": "Male"} | +-------------------------------------+
Esempio 3 – Matrici
È possibile inserire valori in una matrice utilizzando un percorso oltre la fine della matrice esistente. Esempio:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Result';
Risultato:
+--------------+ | Result | +--------------+ | [1, 2, 3, 4] | +--------------+
Tuttavia, se utilizzi un percorso già esistente nell'array, l'array rimarrà invariato:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Result';
Risultato:
+-----------+ | Result | +-----------+ | [1, 2, 3] | +-----------+
Se il valore esistente non è una matrice, viene eseguito il wrapping automaticamente come matrice, quindi esteso con il nuovo valore. Esempio:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[2]', 3) AS 'Result';
Risultato:
+-----------------------+ | Result | +-----------------------+ | [{"a": 1, "b": 2}, 3] | +-----------------------+
Ma ancora una volta, se provi a inserire un valore in un percorso già esistente, il documento JSON rimane invariato:
SELECT JSON_INSERT('{"a": 1, "b": 2}', '$[0]', 3) AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "b": 2} | +------------------+
Esempio 4: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_INSERT(@data, '$.Person.Hobbies[2]', "Base Jumping") AS 'Result';
Risultato:
+----------------------------------------------------------------------------------+ | Result | +----------------------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} | +----------------------------------------------------------------------------------+
Vedi anche JSON_ARRAY_INSERT()
e JSON_ARRAY_APPEND()
se è necessario inserire o aggiungere dati in un array JSON.