Resumo : neste tutorial, você aprenderá como usar a JSON_MERGE_PATCH()
função MySQL para mesclar dois ou mais documentos JSON.
Introdução à função JSON_MERGE_PATCH() do MySQL
A JSON_MERGE_PATCH()
função mescla dois ou mais documentos JSON em um único documento JSON.
Aqui está a sintaxe da JSON_MERGE_PATCH()
função:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe:
json_doc
: este é o documento JSON que você deseja mesclar.
A JSON_MERGE_PATCH()
função retorna um documento JSON mesclado enquanto descarta chaves duplicadas.
A JSON_MERGE_PATCH()
função gera um erro se pelo menos um dos documentos JSON passados como argumentos for inválido .
Observe que a JSON_MERGE_PATCH()
função executa uma operação de mesclagem que segue o padrão RFC 7396 .
A JSON_MERGE_PATCH()
função usa as seguintes regras para mesclar documentos JSON:
1) Se o primeiro argumento não for um objeto, o resultado será o mesmo que se um objeto vazio tivesse sido mesclado com o segundo argumento.
2) Se o segundo argumento não for um objeto, a função retorna o segundo argumento.
3) Se ambos os argumentos forem objetos, a função retornará um objeto JSON com os seguintes membros:
- Todos os membros do primeiro objeto sem membros correspondentes no segundo objeto.
- Todos os membros do segundo objeto sem chaves correspondentes no primeiro objeto, excluindo aqueles com valor JSON nulo.
- Membros com chaves que existem no primeiro e no segundo objetos, em que o valor no segundo objeto não é JSON nulo. Os valores resultam da fusão recursiva dos valores correspondentes no primeiro e no segundo objetos.
Os exemplos da função JSON_MERGE_PATCH() do MySQL
Vejamos alguns exemplos para entender como a JSON_MERGE_PATCH()
função funciona.
1) O primeiro argumento não é um objeto
O exemplo a seguir usa a JSON_MERGE_PATCH()
função para mesclar um array com um objeto:
SELECT
JSON_MERGE_PATCH('[1,2]', '{"name": "John Doe"}');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+--------------------------------------------------+
| JSON_MERGE_PATCH('[1,2]','{"name": "John Doe"}') |
+--------------------------------------------------+
| {"name": "John Doe"} |
+--------------------------------------------------+
1 row in set (0.01 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) O segundo argumento não é um objeto
O exemplo a seguir usa a JSON_MERGE_PATCH()
função para mesclar um objeto com um array, o que resulta no array:
SELECT
JSON_MERGE_PATCH('{"name": "John Doe"}', '[1,2]');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+---------------------------------------------------+
| JSON_MERGE_PATCH('{"name": "John Doe"}', '[1,2]') |
+---------------------------------------------------+
| [1, 2] |
+---------------------------------------------------+
1 row in set (0.01 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
3) Ambos os argumentos são objetos
O exemplo a seguir usa a JSON_MERGE_PATCH()
função para mesclar dois objetos com chaves diferentes. O documento JSON resultante é um objeto que contém todas as chaves dos objetos mesclados:
SELECT
JSON_MERGE_PATCH('{"name": "John Doe"}', '{"age": 22}');
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+---------------------------------------------------------+
| JSON_MERGE_PATCH('{"name": "John Doe"}', '{"age": 22}') |
+---------------------------------------------------------+
| {"age": 22, "name": "John Doe"} |
+---------------------------------------------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
4) Ambos os argumentos são objetos, o primeiro objeto possui uma chave nula
O exemplo a seguir usa a JSON_MERGE_PATCH()
função para mesclar dois objetos. Ambos os objetos têm a mesma idade de chave, mas o primeiro objeto tem um valor nulo, enquanto o segundo tem um valor não nulo:
SELECT
JSON_MERGE_PATCH(
'{"name": "John Doe", "age": null}',
'{"age": 22}'
) result;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+---------------------------------+
| result |
+---------------------------------+
| {"age": 22, "name": "John Doe"} |
+---------------------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
5) Removendo um membro
O exemplo a seguir também usa a JSON_MERGE_PATCH()
função para remover um membro do objeto no primeiro documento JSON especificando um valor nulo para o objeto no segundo argumento:
SELECT
JSON_MERGE_PATCH(
'{"name": "John Doe", "age": 22}',
'{"age": null }'
) result;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+----------------------+
| result |
+----------------------+
| {"name": "John Doe"} |
+----------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
6) Mesclagem Recursiva
O exemplo a seguir também usa a JSON_MERGE_PATCH()
função para mesclar documentos JSON aninhados:
SELECT
JSON_MERGE_PATCH(
'{"person" : {"name": "John Doe"}}',
'{"person" : {"age": 22} }'
) result;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Saída:
+---------------------------------------------+
| result |
+---------------------------------------------+
| {"person": {"age": 22, "name": "John Doe"}} |
+---------------------------------------------+
1 row in set (0.00 sec)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Resumo
- Use a
JSON_MERGE_PATCH()
função para realizar uma mesclagem compatível com RFC 7396 de dois ou mais documentos JSON, retornando um documento JSON mesclado enquanto descarta chaves duplicadas.