Mysql
 sql >> Database >  >> RDS >> Mysql

JSON_REMOVE() – Rimuove i dati da un documento JSON in MySQL

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"]}} |
+------------------------------------------------------------------+