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ímosb
valor de s com9
. Isso ocorre porque especificamos$.b
como segundo argumento e9
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"]}} |+------------ -------------------------------------------------- ------------------+