SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite JSON_REMOVE()


Podemos usar o SQLite json_remove() função para remover um ou mais elementos de um objeto ou matriz JSON.

Passamos o JSON original como o primeiro argumento quando chamamos a função, seguido por um ou mais caminhos que especificam quais elementos remover. Por “elementos”, quero dizer elementos de matriz ou membros de objetos (pares chave/valor).

Sintaxe


A sintaxe fica assim:
json_remove(X,P,...)

Onde X representa o JSON original e P,... representa o(s) caminho(s) a serem excluídos.

Exemplo


Segue um exemplo para demonstrar:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');

Resultado:
{"name":"Fluffy"}

Aqui, especificamos o $.age path, e foi isso que foi removido do documento JSON.

Remover vários membros


Podemos remover vários membros de um objeto JSON especificando vários caminhos, separados por uma vírgula:
SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }', 
    '$.type',
    '$.age'
);

Resultado:
{"name":"Fluffy"}

Matrizes


Podemos remover elementos do array especificando o índice do elemento:
SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');

Resultado:
[0,1,3]

As matrizes são baseadas em zero e, portanto, a contagem começa em 0 .

No entanto, é importante estar atento à ordem em que as remoções são feitas. As remoções ocorrem sequencialmente da esquerda para a direita. As alterações causadas por remoções anteriores podem afetar a pesquisa de caminho para argumentos subsequentes.

Aqui está um exemplo de como isso pode afetar nosso resultado:
SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[0]',
    '$[2]'
);

Resultado:
[1,2]

Neste caso, o elemento de array 0 foi deletado primeiro, depois o elemento array 2 foi excluído da matriz restante. Em outras palavras, o segundo caminho removeu o elemento do array após o primeiro caminho já ter sido removido.

A matriz resultante é uma que talvez não tenhamos previsto. Em vez de remover os elementos 0 e 2 do array original, removemos os elementos 0 e 3 da matriz original.

Podemos superar esse problema reordenando os caminhos:
SELECT json_remove('[ 0, 1, 2, 3 ]', 
    '$[2]',
    '$[0]'
);

Resultado:
[1,3]

Sem caminhos


Os argumentos de caminho são realmente opcionais. Se chamarmos json_remove() sem argumentos de caminho, ele retorna uma versão reduzida do JSON de entrada (ou seja, com o excesso de espaço em branco removido):
SELECT json_remove('{ 
        "name" : "Fluffy",
        "type" : "Cat",
        "age" : 10 
    }'
);

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

Este é o mesmo resultado que obteríamos se usássemos o json() função em vez de json_remove() .

Caminho inexistente


Especificar um caminho que não existe no JSON de entrada resulta no retorno do JSON original, inalterado:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');

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

Caminhos inválidos


Receberemos um erro se nosso caminho não estiver bem formado:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');

Resultado:
Runtime error: JSON path error near 'age'

Nesse caso, esqueci de incluir $. na frente do caminho.

Documentos JSON inválidos


Também receberemos um erro de que o JSON não está bem formado:
SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');

Resultado:
Runtime error: malformed JSON

Desta vez, o erro nos diz que nosso JSON está malformado.