En MySQL, JSON_MERGE_PRESERVE()
combina dos o más documentos JSON y devuelve el resultado.
Proporciona los documentos JSON como argumentos.
Esta función se agregó en MySQL 8.0.3 como sinónimo de JSON_MERGE()
, sin embargo, el JSON_MERGE()
La función ahora está obsoleta y está sujeta a eliminación en una versión futura de MySQL.
Sintaxis
La sintaxis es así:
JSON_MERGE_PRESERVE(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.
Si algún argumento es NULL
, esta función devuelve NULL
.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_MERGE_PRESERVE('{"Name": "Homer"}', '{"Age": 39}') Result;
Resultado:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
Entonces, en este ejemplo, fusionamos dos objetos separados en un solo objeto.
Este es exactamente el mismo resultado que obtendríamos si usáramos JSON_MERGE_PATCH()
función. Sin embargo, si intentamos fusionar claves duplicadas, estas dos funciones producirán resultados diferentes.
Ejemplo 2:claves duplicadas
Como sugiere el nombre, JSON_MERGE_PRESERVE()
La función conserva los miembros con claves duplicadas (aquí es donde difiere del JSON_MERGE_PATCH()
función).
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultado:
+-----------------------------------+ | Result | +-----------------------------------+ | {"Name": ["Bartholomew", "Bart"]} | +-----------------------------------+
Entonces, en este caso, se creó una matriz y tanto Bart como Bartholomew se agregaron como elementos separados de esa matriz.
Esto contrasta con JSON_MERGE_PATCH()
función, que hace lo siguiente:
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
Resultado:
+------------------+ | Result | +------------------+ | {"Name": "Bart"} | +------------------+
Ejemplo 3:varios miembros
Aquí hay otro ejemplo, pero con un miembro extra en el objeto:
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
Resultado:
+----------------------------------------------+ | Result | +----------------------------------------------+ | {"Age": 10, "Name": ["Bartholomew", "Bart"]} | +----------------------------------------------+
Esto también funciona al revés:el resultado es el mismo si agregamos el miembro extra al segundo objeto.
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
Resultado:
+----------------------------------------------+ | Result | +----------------------------------------------+ | {"Age": 10, "Name": ["Bartholomew", "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_PRESERVE('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
Resultado:
+-----------------------------------------------------+ | Result | +-----------------------------------------------------+ | {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} | +-----------------------------------------------------+
Ejemplo 5:matrices
Este es un ejemplo de la combinación de dos matrices con el mismo nombre:
SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
Resultado:
+-------------------------------------------------------+ | Result | +-------------------------------------------------------+ | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} | +-------------------------------------------------------+
Este es otro ejemplo donde JSON_MERGE_PATCH()
devolvería un resultado diferente.
Obviamente, si los arreglos tienen nombres diferentes, terminarán como arreglos separados (pero dentro del mismo documento JSON):
SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') Result;
Resultado:
+------------------------------------------------------------------+ | Result | +------------------------------------------------------------------+ | {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} | +------------------------------------------------------------------+
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"], "Hobbies": ["Trouble"] } }'; SELECT JSON_MERGE_PRESERVE(@data1, @data2) Result;
Resultado:
+------------------------------------------------------------------------------------------------------------------------------+ | Result | +------------------------------------------------------------------------------------------------------------------------------+ | {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief", "Trouble"], "Parents": ["Marge", "Homer"]}} | +------------------------------------------------------------------------------------------------------------------------------+
Para conocer las reglas exactas sobre cómo esta función realiza fusiones, consulte la documentación de MySQL.