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

JSON_INSERT() – Inserir valores em um documento JSON no MySQL


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 e 3 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 em Name (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ém JSON_ARRAY_INSERT() e JSON_ARRAY_APPEND() se você precisar inserir ou anexar dados em uma matriz JSON.