SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite JSON_REMOVE()

Possiamo usare SQLite json_remove() funzione per rimuovere uno o più elementi da un oggetto o una matrice JSON.

Passiamo il JSON originale come primo argomento quando chiamiamo la funzione, seguito da uno o più percorsi che specificano quali elementi rimuovere. Per "elementi", intendo elementi di matrice o membri di oggetti (coppie chiave/valore).

Sintassi

La sintassi è questa:

json_remove(X,P,...)

Dove X rappresenta il JSON originale e P,... rappresenta il/i percorso/i da eliminare.

Esempio

Ecco un esempio da dimostrare:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Risultato:

{"name":"Fluffy"}

Qui, abbiamo specificato il $.age percorso, ed è ciò che è stato rimosso dal documento JSON.

Rimuovi più membri

Possiamo rimuovere più membri da un oggetto JSON specificando più percorsi, separati da una virgola:

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Risultato:

{"name":"Fluffy"}

Array

Possiamo rimuovere gli elementi dell'array specificando l'indice dell'elemento:

SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Risultato:

[0,1,3]

Gli array sono a base zero, quindi il conteggio inizia da 0 .

Tuttavia, è importante essere consapevoli dell'ordine in cui vengono effettuate le rimozioni. Le rimozioni avvengono in sequenza da sinistra a destra. Le modifiche causate da rimozioni precedenti possono influire sulla ricerca del percorso per gli argomenti successivi.

Ecco un esempio di come ciò può influenzare il nostro risultato:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Risultato:

[1,2]

In questo caso, elemento dell'array 0 è stato eliminato prima, quindi l'elemento dell'array 2 è stato eliminato dall'array rimanente. In altre parole, il secondo percorso ha rimosso l'elemento dall'array dopo che il primo percorso era già stato rimosso.

L'array risultante è uno che potremmo non aver previsto. Invece di rimuovere gli elementi 0 e 2 dall'array originale, abbiamo rimosso gli elementi 0 e 3 dall'array originale.

Possiamo superare questo problema riordinando i percorsi:

SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Risultato:

[1,3]

Nessun percorso

Gli argomenti del percorso sono in realtà facoltativi. Se chiamiamo json_remove() senza argomenti di percorso, restituisce una versione ridotta del JSON di input (ovvero con lo spazio bianco in eccesso rimosso):

SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

Risultato:

{"name":"Fluffy","type":"Cat","age":10}

Questo è lo stesso risultato che otterremmo se usassimo json() funzione invece di json_remove() .

Percorso inesistente

La specifica di un percorso che non esiste nel JSON di input comporta la restituzione del JSON originale, invariato:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

Risultato:

{"name":"Fluffy","age":10}

Percorsi non validi

Riceveremo un errore se il nostro percorso non è ben formato:

SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Risultato:

Runtime error: JSON path error near 'age'

In questo caso, ho dimenticato di includere $. all'inizio del sentiero.

Documenti JSON non validi

Riceveremo anche un errore che JSON non è ben formato:

SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Risultato:

Runtime error: malformed JSON

Questa volta l'errore ci dice che il nostro JSON non è corretto.