Função MySQL JSON_MERGE_PATCH()

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *