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

JSON_REPLACE() – Substitua valores em um documento JSON no MySQL


No MySQL, o JSON_REPLACE() A função substitui valores em um documento JSON e retorna o resultado.

Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho para substituir os dados em, seguido pelo valor pelo qual substituir o valor existente.

Você pode substituir dados em vários locais do documento, se necessário. Para fazer isso, basta fornecer vários pares de caminho/valor conforme necessário.


Sintaxe


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

Onde json_doc é o documento JSON, path é o caminho para substituir os dados em e val é o novo valor para substituir o valor existente.

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

Se o par caminho/valor não existir no documento JSON, ele será ignorado e não terá efeito.

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 conter um * ou ** curinga, caso contrário ocorrerá um erro.

Exemplo 1 – Uso básico


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

Resultado:
+--------------------------+| Resultado |+--------------------------+| {"a":1, "b":9, "c":3} |+--------------------------+ 
Nesse caso, substituímos b valor de s com 9 . Isso ocorre porque especificamos $.b como segundo argumento e 9 como o terceiro.

Aqui está outro exemplo:
SELECT JSON_REPLACE('{"Nome":"Bart", "Idade":10}', '$.Nome', 'Nelson - Ha Ha!') AS 'Result';

Resultado:
+----------------------------------------+| Resultado |+----------------------------------------+| {"Idade":10, "Nome":"Nelson - Ha Ha!"} |+----------------------------- -----------+

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_REPLACE('{"Nome":"Homer", "Idade":39}', '$.Gender', 'Masculino') AS 'Result';

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

Exemplo 3 – Matrizes


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

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

Arrays usam numeração baseada em zero, portanto, neste caso, o primeiro elemento é substituído.

Aqui está outro exemplo de matriz. Desta vez, substituímos um valor em uma matriz aninhada.
SELECT JSON_REPLACE('[1, 2, [3, 4, 5]]', '$[2][1]', 9) AS 'Resultado';

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

Exemplo 4 – Vários caminhos


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

Exemplo básico:
SELECT JSON_REPLACE('[1, 2, 3, 4, 5]', '$[1]', 9, '$[3]', 22) AS 'Result';

Resultado:
+------------------+| Resultado |+------------------+| [1, 9, 3, 22, 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"] } }';SELECT JSON_REPLACE(@data , '$.Person.Name', 'Bart', '$.Person.Age', 10, '$.Person.Hobbies[1]', 'Base Jumping') AS 'Result';

Resultado:
+---------------------------------------------- ----------------------------------+| Resultado |+---------------------------------------------------------- ----------------------------------+| {"Pessoa":{"Idade":10, "Nome":"Bart", "Hobbies":["Comer", "Base Jumping"]}} |+------------ -------------------------------------------------- ------------------+