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

JSON_SET() – Inserir ou atualizar valores em um documento JSON no MySQL


No MySQL, o JSON_SET() A função insere ou atualiza valores 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. Você pode fornecer vários pares de caminho/valor se precisar atualizar vários valores.


Sintaxe


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

Onde:
  • json_doc é o documento JSON.
  • path é o caminho do elemento para o qual inserir dados ou atualizar o valor.
  • val é o novo valor.

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.

Ocorre um erro se o primeiro argumento não for um documento JSON válido ou se algum argumento de caminho não for uma expressão de caminho válida ou contiver um * ou ** curinga.

Exemplo 1 – Inserir um valor


Aqui está um exemplo para demonstrar como inserir um valor usando esta função.
SELECT JSON_SET('{"a":1, "b":2}', '$.c', 3) AS 'Result';

Resultado:
+--------------------------+| Resultado |+--------------------------+| {"a":1, "b":2, "c":3} |+--------------------------+ 
Neste caso, o 3º argumento é inserido no array no caminho especificado. 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_SET('{"Name":"Homer", "Gender":"Masculino"}', '$.Idade', 39) AS 'Result';

Resultado:
+---------------------------------------------- --+| Resultado |+---------------------------------------------------------- -+| {"Idade":39, "Nome":"Homer", "Gênero":"Masculino"} |+------------------------- -----------------------+

Exemplo 2 – Atualizar um valor


O exemplo anterior inseriu um valor. Este exemplo atualiza um valor existente.
SELECT JSON_SET('{"a":1, "b":2}', '$.b', 3) AS 'Result';

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

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

Resultado:
+------------------------------------+| Resultado |+------------------------------------+| {"Nome":"Bart", "Gênero":"Masculino"} |+------------------------------------------ -----+

Exemplo 3 – Matrizes


Você pode inserir valores em uma matriz usando um caminho após o final da matriz existente. Exemplo:
SELECT JSON_SET('[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 valor será atualizado:
SELECT JSON_SET('[1, 2, 3]', '$[1]', 4) AS 'Resultado';

Resultado:
+-----------+| Resultado |+-----------+| [1, 4, 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_SET('{"a":1, "b":2}', '$[2]', 3) AS 'Resultado';

Resultado:
+-----------------------+| Resultado |+-----------------------+| [{"a":1, "b":2}, 3] |+-----------------------+

Exemplo 4 – Vários valores


Você pode inserir/atualizar vários valores de uma só vez. Basta adicionar cada par de chave/valor separado por uma vírgula. Exemplo:
SELECT JSON_SET('{"a":1, "b":2, "c":3}', '$.a', 9, '$.c', 'Bart') AS 'Result';

Resultado:
+-------------------------------+| Resultado |+------------------------------------------+| {"a":9, "b":2, "c":"Bart"} |+------------------------------------------ ----+

Exemplo 5 – 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_SET(@data, '$.Pessoa. Name', 'Bart', '$.Person.Hobbies[1]', "Mischief") AS 'Result';

Resultado:
+---------------------------------------------- -------------------+| Resultado |+---------------------------------------------------------- ------------------+| {"Pessoa":{"Nome":"Bart", "Hobbies":["Comer", "Travessuras"]}} |+-------------------- ----------------------------------------------+

Veja também JSON_INSERT() para inserir valores sem substituir valores existentes e JSON_REPLACE() para substituir apenas os valores existentes.