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

JSON_MERGE_PRESERVE() – Mesclar vários documentos JSON no MySQL


No MySQL, o JSON_MERGE_PRESERVE() A função mescla dois ou mais documentos JSON e retorna o resultado.

Você fornece os documentos JSON como argumentos.

Esta função foi adicionada no MySQL 8.0.3 como sinônimo de JSON_MERGE() , no entanto, o JSON_MERGE() A função agora está obsoleta e está sujeita a remoção em uma versão futura do MySQL.


Sintaxe


A sintaxe fica assim:
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)

Onde json_doc são os documentos JSON a serem mesclados.

Se algum dos documentos for inválido, um erro será gerado.

Se algum argumento for NULL , esta função retorna NULL .

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT JSON_MERGE_PRESERVE('{"Nome":"Homer"}', '{"Idade":39}') Resultado;

Resultado:
+------------------------------+| Resultado |+-----------------------------------------+| {"Idade":39, "Nome":"Homer"} |+------------------------------+ 
Portanto, neste exemplo, mesclamos dois objetos separados em um objeto.

Este é exatamente o mesmo resultado que obteríamos se usássemos o JSON_MERGE_PATCH() função. No entanto, se tentarmos mesclar chaves duplicadas, essas duas funções produzirão resultados diferentes.

Exemplo 2 – Chaves duplicadas


Como o nome sugere, o JSON_MERGE_PRESERVE() função preserva membros com chaves duplicadas (é aqui que difere do JSON_MERGE_PATCH() função).
SELECT JSON_MERGE_PRESERVE('{"Nome":"Bartholomew"}', '{"Nome":"Bart"}') Resultado;

Resultado:
+-----------------------------------+| Resultado |+-----------------------------------+| {"Nome":["Bartolomeu", "Bart"]} |+------------------------------------------------ --+

Portanto, neste caso, um array foi criado e Bart e Bartholomew foram adicionados como elementos separados desse array.

Isso contrasta com o JSON_MERGE_PATCH() função, que faz o seguinte:
SELECT JSON_MERGE_PATCH('{"Nome":"Bartholomew"}', '{"Nome":"Bart"}') Resultado;

Resultado:
+------------------+| Resultado |+------------------+| {"Nome":"Bart"} |+------------------+

Exemplo 3 – Vários membros


Aqui está outro exemplo, mas com um membro extra no objeto:
SELECT JSON_MERGE_PRESERVE('{"Nome":"Bartolomeu", "Idade":10}', '{"Nome":"Bart"}') Resultado;

Resultado:
+---------------------------------------------- +| Resultado |+---------------------------------------------+ | {"Idade":10, "Nome":["Bartolomeu", "Bart"]} |+-------------------------------------- -------------------+

Isso também funciona ao contrário – o resultado é o mesmo se adicionarmos o membro extra ao segundo objeto.
SELECT JSON_MERGE_PRESERVE('{"Nome":"Bartholomew"}', '{"Nome":"Bart", "Idade":10}') Resultado;

Resultado:
+---------------------------------------------- +| Resultado |+---------------------------------------------+ | {"Idade":10, "Nome":["Bartolomeu", "Bart"]} |+-------------------------------------- -------------------+

Exemplo 4 – Mais documentos


Você não está limitado a mesclar apenas dois documentos. Você pode mesclar quantos forem necessários. Aqui está um exemplo de mesclagem de três objetos.
SELECT JSON_MERGE_PRESERVE('{"Nome":"Bart"}', '{"Idade":10}', '{"Cor do cabelo":"Amarelo"}') Resultado;

Resultado:
+---------------------------------------------- -------+| Resultado |+---------------------------------------------------------- ------+| {"Idade":10, "Nome":"Bart", "Cor do cabelo":"Amarelo"} |+------------------------ -----------------------------+

Exemplo 5 – Matrizes


Aqui está um exemplo de mesclagem de dois arrays com o mesmo nome:
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Resultado;

Resultado:
+---------------------------------------------- ---------+| Resultado |+---------------------------------------------------------- --------+| {"Hobbies":["Problemas", "Travessuras", "Skateboarding"]} |+----------------------------- ---------------+

Este é outro exemplo em que JSON_MERGE_PATCH() retornaria um resultado diferente.

Obviamente, se os arrays tiverem nomes diferentes, eles terminarão como arrays separados (mas dentro do mesmo documento JSON):
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Problema", "Travessura"]}', '{"Hobby":["Skateboarding"]}') Resultado;

Resultado:
+---------------------------------------------- --------------------+| Resultado |+---------------------------------------------------------- -------------------+| {"Hobby":["Skateboarding"], "Hobbies":["Problemas", "Travessuras"]} |+----------------------- -------------------------------------------+

Exemplo 6 – Um documento JSON maior


Aqui está um exemplo que mescla documentos JSON (um pouco) maiores.
SET @data1 ='{ "Suspect":{ "Name":"Bart", "Hobbies":["Skateboarding", "Mischief"] } }', @data2 ='{ "Suspect":{ " Idade":10, "Pais":["Marge", "Homer"], "Hobbies":["Problema"] } }';SELECT JSON_MERGE_PRESERVE(@data1, @data2) Resultado;

Resultado:
+---------------------------------------------- -------------------------------------------------- ------------------------------+| Resultado |+---------------------------------------------------------- -------------------------------------------------- -----------------------------+| {"Suspect":{"Idade":10, "Nome":"Bart", "Hobbies":["Skate", "Travessuras", "Problemas"], "Pais":["Marge", "Homer" ]}} |+--------------------------------------------- -------------------------------------------------- -------------------------------+

Para obter as regras exatas de como essa função executa mesclagens, consulte a documentação do MySQL.