No MySQL, o
JSON_MERGE_PATCH()
A função executa uma mesclagem compatível com RFC 7396 de dois ou mais documentos JSON, sem preservar membros com chaves duplicadas. Você fornece os documentos JSON como argumentos.
Sintaxe
A sintaxe fica assim:
JSON_MERGE_PATCH(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. Exemplo 1 – Uso básico
Aqui está um exemplo para demonstrar.
SELECT JSON_MERGE_PATCH('{"Nome":"Homer"}', '{"Idade":39}') Resultado;
Resultado:
+------------------------------+| Resultado |+--------------------------+| {"Idade":39, "Nome":"Homer"} |+------------------------------+
Portanto, neste exemplo, mesclamos dois objetos separados em um objeto.
Exemplo 2 – Chaves duplicadas
Como mencionado, esta função não preserva membros com chaves duplicadas. Exemplo:
SELECT JSON_MERGE_PATCH('{"Nome":"Bartholomew"}', '{"Nome":"Bart"}') Resultado;
Resultado:
+------------------+| Resultado |+------------------+| {"Nome":"Bart"} |+------------------+
Então, neste caso, Bart ganhou.
Se você precisar preservar membros com chaves duplicadas, use oJSON_MERGE_PRESERVE()
função em vez disso. Usar essa função para este exemplo transformariaName
em um array contendo tantoBartholomew
eBart
. Assim:
SELECT JSON_MERGE_PRESERVE('{"Nome":"Bartholomew"}', '{"Nome":"Bart"}') Resultado;
Resultado:
+-----------------------------------+| Resultado |+-----------------------------------+| {"Nome":["Bartolomeu", "Bart"]} |+------------------------------------------------ --+Exemplo 3 – Vários membros
Aqui está outro exemplo, mas com um membro extra no objeto:
SELECT JSON_MERGE_PATCH('{"Nome":"Bartolomeu", "Idade":10}', '{"Nome":"Bart"}') Resultado;
Resultado:
+-----------------------------+| Resultado |+-----------------------------+| {"Idade":10, "Nome":"Bart"} |+-----------------------------+
Então, Bart ainda vence, e ele foi fundido com os outros membros do primeiro objeto.
Claro, isso também funciona ao contrário – o resultado é o mesmo se adicionarmos o membro extra ao segundo objeto.
SELECT JSON_MERGE_PATCH('{"Nome":"Bartholomew"}', '{"Nome":"Bart", "Idade":10}') Resultado;
Resultado:
+-----------------------------+| Resultado |+-----------------------------+| {"Idade":10, "Nome":"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_PATCH('{"Nome":"Bart"}', '{"Idade":10}', '{"Cor do cabelo":"Amarelo"}') Resultado;
Resultado:
+---------------------------------------------- -------+| Resultado |+---------------------------------------------------------- ------+| {"Idade":10, "Nome":"Bart", "Cor do cabelo":"Amarelo"} |+------------------------ -----------------------------+Exemplo 5 – Matrizes
Mesclar duas matrizes com o mesmo nome resultará na preservação de apenas uma delas:
SELECT JSON_MERGE_PATCH('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Resultado;
Resultado:
+--------------------------------+| Resultado |+--------------------------------+| {"Hobbies":["Skate"]} |+--------------------------------+
Novamente, você pode usarJSON_MERGE_PRESERVE()
se você precisar preservar ambas as matrizes. Assim, o exemplo anterior pode ser reescrito para o seguinte:
SELECT JSON_MERGE_PRESERVE('{"Hobbies":["Trouble", "Mischief"]}', '{"Hobbies":["Skateboarding"]}') Resultado;
Resultado:
+---------------------------------------------- ---------+| Resultado |+---------------------------------------------------------- --------+| {"Hobbies":["Problemas", "Travessuras", "Skateboarding"]} |+----------------------------- ---------------+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"] } }';SELECT JSON_MERGE_PATCH(@data1, @data2) Resultado;
Resultado:
+---------------------------------------------- -------------------------------------------------- -------------------+| Resultado |+---------------------------------------------------------- -------------------------------------------------- ------------------+| {"Suspect":{"Idade":10, "Nome":"Bart", "Hobbies":["Skateboarding", "Travessuras"], "Pais":["Marge", "Homer"]}} | +------------------------------------------------- -------------------------------------------------- ----------------+
Para obter as regras exatas de como essa função executa mesclagens, consulte a documentação do MySQL.