Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

JSON_REMOVE() – Remover dados de um documento JSON no MySQL


No MySQL, o JSON_REMOVE() A função remove dados de um documento JSON e retorna o resultado.

Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho do qual remover os dados. Você pode fornecer vários caminhos, se necessário.


Sintaxe


A sintaxe fica assim:
JSON_REMOVE(json_doc, caminho[, caminho] ...)

Onde json_doc é o documento JSON e path é o caminho para remover os dados.

O path argumentos são avaliados da esquerda para a direita. O documento produzido pela avaliação de um caminho se torna o novo valor em relação ao qual o próximo caminho é avaliado.

O primeiro argumento deve ser um documento JSON válido, caso contrário, ocorrerá um erro.

Além disso, o path argumento deve ser uma expressão de caminho válida e não pode ser $ ou contém um * ou ** curinga, caso contrário ocorrerá um erro.

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT JSON_REMOVE('{"a":1, "b":2, "c":3}', '$.b') AS 'Result';

Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "c":3} |+------------------+

Neste caso, removemos o par chave/valor com a chave de b . Isso ocorre porque especificamos $.b como segundo argumento.

Aqui está outro exemplo:
SELECT JSON_REMOVE('{"Name":"Homer", "Gender":"Masculino", "Idade":39}', '$.Idade') AS 'Result';

Resultado:
+-------------------------------------+| Resultado |+-------------------------------------+| {"Nome":"Homer", "Sexo":"Masculino"} |+------------------------------------------ ------+

Exemplo 2 – Caminho inexistente


Se você especificar um caminho que não existe, nada será removido. O documento JSON original é retornado sem modificação.
SELECT JSON_REMOVE('{"Nome":"Homer", "Idade":39}', '$.Gender') AS 'Result';

Resultado:
+------------------------------+| Resultado |+-----------------------------------------+| {"Idade":39, "Nome":"Homer"} |+------------------------------+ 

Exemplo 3 – Matrizes


Aqui está um exemplo usando uma matriz.
SELECT JSON_REMOVE('[1, 2, 3]', '$[0]') AS 'Resultado';

Resultado:
+--------+| Resultado |+--------+| [2, 3] |+--------+

As matrizes usam numeração baseada em zero, portanto, nesse caso, o primeiro elemento é removido da matriz.

Aqui está outro exemplo de matriz. Desta vez, removemos um valor de um array aninhado.
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]') AS 'Resultado';

Resultado:
+----------------+| Resultado |+----------------+| [1, 2, [3, 5]] |+----------------+

Exemplo 4 – Vários caminhos


Você pode especificar mais de um caminho para remover dados de vários locais no documento JSON.

Exemplo básico:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[1]', '$[3]') AS 'Resultado';

Resultado:
+-----------+| Resultado |+-----------+| [1, 3, 4] |+-----------+

Como mencionado, o path os argumentos são avaliados da esquerda para a direita e o documento produzido pela avaliação de um caminho se torna o novo valor em relação ao qual o próximo caminho é avaliado.

Portanto, neste exemplo, o argumento 2nd path remove um valor diferente do que teria removido se fosse o único argumento path. Se fosse o único argumento de caminho, teria removido 4 .

Aqui está o que quero dizer:
SELECT JSON_REMOVE('[1, 2, 3, 4, 5]', '$[3]') AS 'One Path', JSON_REMOVE('[1, 2, 3, 4, 5]', ' $[1]', '$[3]') AS 'Dois Caminhos';

Resultado:
+--------------+-----------+| Um Caminho | Dois Caminhos |+--------------+-----------+| [1, 2, 3, 5] | [1, 3, 4] |+--------------+-----------+

Então você pode ver que quando usamos $[3] como o único caminho, ele remove 4 da matriz. Mas quando o usamos como 2º caminho, ele remove 5 (e 4 fica intacto).

Outro exemplo, desta vez excluindo valores de uma matriz e uma matriz aninhada:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[0]', '$[1][1]') AS 'Resultado';

Resultado:
+-------------+| Resultado |+-------------+| [2, [3, 5]] |+-------------+

Então, novamente, mesmo que o array esteja na posição 2 no documento original, o primeiro valor do caminho ($[0] ) corta o array externo e o array interno muda para a posição 1 .

Se isso faz sua cabeça girar, você sempre pode trocar os argumentos de caminho, para que os valores mais à direita sejam removidos primeiro. Dessa forma, não afetará a posição dos valores mais à esquerda e, portanto, você poderá especificar os caminhos com base no documento JSON original.

Assim, podemos alterar o código anterior para o seguinte e obter o mesmo resultado:
SELECT JSON_REMOVE('[1, 2, [3, 4, 5]]', '$[2][1]', '$[0]') AS 'Resultado';

Resultado:
+-------------+| Resultado |+-------------+| [2, [3, 5]] |+-------------+

Exemplo 5 – Um documento JSON maior


Aqui está um exemplo com um documento JSON (um pouco) maior.
SET @data ='{ "Pessoa":{ "Nome":"Homer", "Idade":39, "Hobbies":["Comer", "Dormir", "Base Jumping"] } }'; SELECT JSON_REMOVE(@data, '$.Person.Age', '$.Person.Hobbies[2]') AS 'Result';

Resultado:
+---------------------------------------------- --------------------+| Resultado |+---------------------------------------------------------- -------------------+| {"Pessoa":{"Nome":"Homer", "Hobbies":["Comer", "Dormir"]}} |+------------------- -----------------------------------------------+