No MySQL, o
JSON_INSERT()
A função insere um valor em um documento JSON e retorna o resultado. Você fornece o documento JSON como o primeiro argumento, seguido pelo caminho a ser inserido, seguido pelo valor a ser inserido.
Sintaxe
A sintaxe fica assim:
JSON_INSERT(json_doc, caminho, val[, caminho, val] ...)
Onde:
json_doc
é o documento JSON.path
é o caminho do elemento no qual inserir o novo valor.val
é o novo valor que será inserido.
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.
Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT JSON_INSERT('{"a":1, "b":2}', '$.c', 3) AS 'Result';
Resultado:
+--------------------------+| Resultado |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+
Portanto, o terceiro argumento é inserido na matriz no caminho especificado. Neste caso, eu uso$.c
para o caminho e3
para que o valor seja inserido. Isso resulta em um par chave/valor de"c": 3
.
Aqui está outro exemplo:
SELECT JSON_INSERT('{"Name":"Homer", "Gender":"Masculino"}', '$.Idade', 39) AS 'Result';
Resultado:
+---------------------------------------------- --+| Resultado |+---------------------------------------------------------- -+| {"Idade":39, "Nome":"Homer", "Gênero":"Masculino"} |+------------------------- -----------------------+Exemplo 2 – Tentando substituir um caminho existente
Um par caminho-valor para um caminho existente no documento é ignorado e não substitui o valor do documento existente.
Portanto, se modificarmos o exemplo anterior para inserir um valor emName
(que já existe), nenhuma inserção ocorre:
SELECT JSON_INSERT('{"Name":"Homer", "Gender":"Masculino"}', '$.Name', "Bart") AS 'Result';
Resultado:
+-------------------------------------+| Resultado |+-------------------------------------+| {"Nome":"Homer", "Sexo":"Masculino"} |+------------------------------------------ ------+Exemplo 3 – Matrizes
Você pode inserir valores em uma matriz usando um caminho após o final da matriz existente. Exemplo:
SELECT JSON_INSERT('[1, 2, 3]', '$[3]', 4) AS 'Resultado';
Resultado:
+--------------+| Resultado |+----------+| [1, 2, 3, 4] |+-----------------+
No entanto, se você usar um caminho que já existe no array, o array permanecerá inalterado:
SELECT JSON_INSERT('[1, 2, 3]', '$[1]', 4) AS 'Resultado';
Resultado:
+-----------+| Resultado |+-----------+| [1, 2, 3] |+-----------+
Se o valor existente não for uma matriz, ele será encapsulado automaticamente como uma matriz e estendido com o novo valor. Exemplo:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[2]', 3) AS 'Resultado';
Resultado:
+-----------------------+| Resultado |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+
Mas mais uma vez, se você tentar inserir um valor em um caminho que já existe, o documento JSON permanece inalterado:
SELECT JSON_INSERT('{"a":1, "b":2}', '$[0]', 3) AS 'Resultado';
Resultado:
+------------------+| Resultado |+------------------+| {"a":1, "b":2} |+------------------+Exemplo 4 – Um documento JSON maior
Aqui está um exemplo com um documento JSON (um pouco) maior.
SET @data ='{ "Pessoa":{ "Nome":"Homer", "Hobbies":["Comer", "Dormir"] } }';SELECT JSON_INSERT(@data, '$.Pessoa. Hobbies[2]', "Base Jumping") AS 'Result';
Resultado:
+---------------------------------------------- ------------------------------------+| Resultado |+---------------------------------------------------------- -----------------------------------+| {"Pessoa":{"Nome":"Homer", "Hobbies":["Comer", "Dormir", "Base Jumping"]}} |+---------- -------------------------------------------------- ------------------+
Veja tambémJSON_ARRAY_INSERT()
eJSON_ARRAY_APPEND()
se você precisar inserir ou anexar dados em uma matriz JSON.