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

JSON_MERGE_PATCH() – Execute uma mesclagem compatível com RFC 7396 de documentos JSON no MySQL


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 o JSON_MERGE_PRESERVE() função em vez disso. Usar essa função para este exemplo transformaria Name em um array contendo tanto Bartholomew e Bart . 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 usar JSON_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.