In MySQL, il JSON_REMOVE()
rimuove i dati da un documento JSON e restituisce il risultato.
Fornisci il documento JSON come primo argomento, seguito dal percorso da cui rimuovere i dati. Puoi fornire più percorsi se necessario.
Sintassi
La sintassi è questa:
JSON_REMOVE(json_doc, path[, path] ...)
Dove json_doc
è il documento JSON e path
è il percorso da cui rimuovere i dati.
Il path
gli argomenti vengono valutati da sinistra a destra. Il documento prodotto dalla valutazione di un percorso diventa il nuovo valore rispetto al quale viene valutato il percorso successivo.
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ò essere $
o contiene un *
o **
carattere jolly, altrimenti si verificherà un errore.
Esempio 1 – Utilizzo di base
Ecco un esempio da dimostrare.
SELECT JSON_REMOVE('{"a": 1, "b": 2, "c": 3}', '$.b') AS 'Result';
Risultato:
+------------------+ | Result | +------------------+ | {"a": 1, "c": 3} | +------------------+
In questo caso, abbiamo rimosso la coppia chiave/valore con la chiave di b
. Questo perché abbiamo specificato $.b
come secondo argomento.
Ecco un altro esempio:
SELECT JSON_REMOVE('{"Name": "Homer", "Gender": "Male", "Age": 39}', '$.Age') AS 'Result';
Risultato:
+-------------------------------------+ | Result | +-------------------------------------+ | {"Name": "Homer", "Gender": "Male"} | +-------------------------------------+
Esempio 2 – Percorso inesistente
Se specifichi un percorso che non esiste, nulla viene rimosso. Il documento JSON originale viene restituito senza modifiche.
SELECT JSON_REMOVE('{"Name": "Homer", "Age": 39}', '$.Gender') AS 'Result';
Risultato:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
Esempio 3 – Matrici
Ecco un esempio che utilizza un array.
SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Result';
Risultato:
+--------+ | Result | +--------+ | [2, 3] | +--------+
Gli array utilizzano la numerazione in base zero, quindi in questo caso il primo elemento viene rimosso dall'array.
Ecco un altro esempio di array. Questa volta rimuoviamo un valore da un array nidificato.
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Result';
Risultato:
+----------------+ | Result | +----------------+ | [1, 2, [3, 5]] | +----------------+
Esempio 4 – Percorsi multipli
Puoi specificare più di un percorso per rimuovere i dati da più posizioni nel documento JSON.
Esempio di base:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Result';
Risultato:
+-----------+ | Result | +-----------+ | [1, 3, 4] | +-----------+
Come accennato, il path
gli argomenti vengono valutati da sinistra a destra e il documento prodotto dalla valutazione di un percorso diventa il nuovo valore rispetto al quale viene valutato il percorso successivo.
Pertanto, in questo esempio, l'argomento del 2° percorso rimuove un valore diverso da quello che avrebbe rimosso se fosse stato l'unico argomento del percorso. Se fosse stato l'unico argomento del percorso, avrebbe rimosso 4
.
Ecco cosa intendo:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'One Path', JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Two Paths';
Risultato:
+--------------+-----------+ | One Path | Two Paths | +--------------+-----------+ | [1, 2, 3, 5] | [1, 3, 4] | +--------------+-----------+
Quindi puoi vederlo quando usiamo $[3]
come unico percorso, rimuove 4
dalla matrice. Ma quando lo usiamo come 2° percorso, rimuove 5
(e 4
non viene toccato).
Un altro esempio, questa volta l'eliminazione di valori da un array e un array nidificato:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Result';
Risultato:
+-------------+ | Result | +-------------+ | [2, [3, 5]] | +-------------+
Quindi di nuovo, anche se l'array si trova nella posizione 2
nel documento originale, il primo valore del percorso ($[0]
) riduce l'array esterno e l'array interno cambia nella posizione 1
.
Se questo ti fa girare la testa, puoi sempre scambiare gli argomenti del percorso, in modo che i valori più a destra vengano rimossi per primi. In questo modo, non influirà sulla posizione dei valori più a sinistra e, pertanto, puoi specificare i percorsi in base al documento JSON originale.
Quindi possiamo modificare il codice precedente nel seguente e ottenere lo stesso risultato:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Result';
Risultato:
+-------------+ | Result | +-------------+ | [2, [3, 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", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';
Risultato:
+------------------------------------------------------------------+ | Result | +------------------------------------------------------------------+ | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping"]}} | +------------------------------------------------------------------+