En MySQL, el JSON_MERGE_PATCH() realiza una combinación compatible con RFC 7396 de dos o más documentos JSON, sin conservar los miembros que tienen claves duplicadas.
Proporciona los documentos JSON como argumentos.
Sintaxis
La sintaxis es así:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
Donde json_doc son los documentos JSON que se fusionarán. Si alguno de los documentos no es válido, se genera un error.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_MERGE_PATCH('{"Name": "Homer"}', '{"Age": 39}') Result;
Resultado:
+------------------------------+
| Result |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+
Entonces, en este ejemplo, fusionamos dos objetos separados en un solo objeto.
Ejemplo 2:claves duplicadas
Como se mencionó, esta función no conserva los miembros con claves duplicadas. Ejemplo:
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultado:
+------------------+
| Result |
+------------------+
| {"Name": "Bart"} |
+------------------+
Entonces, en este caso, Bart ganó.
Si necesita conservar miembros con claves duplicadas, use JSON_MERGE_PRESERVE() función en su lugar. Usar esa función para este ejemplo convertiría Name en una matriz que contiene tanto Bartholomew y Bart . Así:
SELECT
JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultado:
+-----------------------------------+
| Result |
+-----------------------------------+
| {"Name": ["Bartholomew", "Bart"]} |
+-----------------------------------+
Ejemplo 3:varios miembros
Aquí hay otro ejemplo, pero con un miembro extra en el objeto:
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
Resultado:
+-----------------------------+
| Result |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+
Entonces, Bart todavía gana y se ha fusionado con los otros miembros del primer objeto.
Por supuesto, esto también funciona al revés:el resultado es el mismo si agregamos el miembro extra al segundo objeto.
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
Resultado:
+-----------------------------+
| Result |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+
Ejemplo 4:más documentos
No está limitado a fusionar solo dos documentos. Puede fusionar tantos como sea necesario. Este es un ejemplo de la combinación de tres objetos.
SELECT
JSON_MERGE_PATCH('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
Resultado:
+-----------------------------------------------------+
| Result |
+-----------------------------------------------------+
| {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} |
+-----------------------------------------------------+
Ejemplo 5:matrices
La combinación de dos matrices del mismo nombre dará como resultado que solo se conserve una de ellas:
SELECT
JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Resultado:
+--------------------------------+
| Result |
+--------------------------------+
| {"Hobbies": ["Skateboarding"]} |
+--------------------------------+
Nuevamente, puede usar JSON_MERGE_PRESERVE() si necesita conservar ambas matrices. Entonces, el ejemplo anterior se puede reescribir de la siguiente manera:
SELECT
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Resultado:
+-------------------------------------------------------+
| Result |
+-------------------------------------------------------+
| {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+-------------------------------------------------------+
Ejemplo 6:un documento JSON más grande
Aquí hay un ejemplo que fusiona documentos JSON (ligeramente) más grandes.
SET @data1 = '{
"Suspect": {
"Name": "Bart",
"Hobbies": ["Skateboarding", "Mischief"]
}
}',
@data2 = '{
"Suspect": {
"Age": 10,
"Parents": ["Marge", "Homer"]
}
}';
SELECT JSON_MERGE_PATCH(@data1, @data2) Result;
Resultado:
+-------------------------------------------------------------------------------------------------------------------+
| Result |
+-------------------------------------------------------------------------------------------------------------------+
| {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"], "Parents": ["Marge", "Homer"]}} |
+-------------------------------------------------------------------------------------------------------------------+
Para conocer las reglas exactas sobre cómo esta función realiza fusiones, consulte la documentación de MySQL.