En MariaDB, JSON_MERGE_PATCH()
es una función integrada que combina dos o más documentos JSON y devuelve el resultado.
El JSON_MERGE_PATCH()
La función es un reemplazo compatible con RFC 7396 para JSON_MERGE()
función, que ha quedado en desuso.
Sintaxis
La sintaxis es así:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
Donde json_doc
son los documentos JSON a fusionar.
Ejemplo
Aquí hay un ejemplo para demostrarlo.
SELECT JSON_MERGE_PATCH('{"name":"Wag"}', '{"type":"Dog"}');
Resultado:
+------------------------------------------------------+ | JSON_MERGE_PATCH('{"name":"Wag"}', '{"type":"Dog"}') | +------------------------------------------------------+ | {"name": "Wag", "type": "Dog"} | +------------------------------------------------------+
Podemos ver que los dos documentos se han fusionado en uno.
Aquí hay un ejemplo que fusiona tres documentos:
SELECT JSON_MERGE_PATCH(
'{ "name" : "Wag" }',
'{ "type" : "Dog" }',
'{ "score" : [ 9, 7, 8 ] }'
) AS Result;
Resultado:
+----------------------------------------------------+ | Result | +----------------------------------------------------+ | {"name": "Wag", "type": "Dog", "score": [9, 7, 8]} | +----------------------------------------------------+
Arreglos
El JSON_MERGE_PATCH()
la función no fusiona matrices:
SELECT JSON_MERGE_PATCH(
'[1,2,3]',
'[4,5,6]'
) AS Result;
Resultado:
+-----------+ | Result | +-----------+ | [4, 5, 6] | +-----------+
Esto contrasta con el (obsoleto) JSON_MERGE()
función y su sinónimo JSON_MERGE_PRESERVE()
, los cuales fusionan matrices.
Formato del Resultado
Es posible que hayas notado que JSON_MERGE_PATCH()
añade espacios al documento resultante. Si esto es un problema, puede usar JSON_COMPACT()
para eliminar el espacio.
Ejemplo:
SELECT
JSON_COMPACT(
JSON_MERGE_PATCH(
'{"name":"Wag"}',
'{"type":"Dog"}',
'{"score":[9,7,8]}'
)
) AS Result;
Resultado:
+---------------------------------------------+ | Result | +---------------------------------------------+ | {"name":"Wag","type":"Dog","score":[9,7,8]} | +---------------------------------------------+
Pero si necesita ir por el otro lado y obtener un formato adicional, como estructuras con sangría, pruebe el JSON_DETAILED()
función.
SELECT
JSON_DETAILED(
JSON_MERGE_PATCH(
'{ "name" : "Wag" }',
'{ "type" : "Dog" }',
'{ "score" : [ 9, 7, 8 ] }'
)
) AS Result;
Resultado:
+---------------------------------------+ | Result | +---------------------------------------+ | { "name": "Wag", "type": "Dog", "score": [ 9, 7, 8 ] } | +---------------------------------------+
Argumento nulo
Si algún argumento es NULL
, el resultado es NULL
:
SELECT
JSON_MERGE_PATCH('{"a":1}', null) AS a,
JSON_MERGE_PATCH(null, '{"a":1}') AS b,
JSON_MERGE_PATCH(null, null) AS c;
Resultado:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Recuento de parámetros incorrecto
Llamar a la función sin ningún argumento da como resultado un error:
SELECT JSON_MERGE_PATCH();
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH'
Es lo mismo cuando proporcionas solo un argumento:
SELECT JSON_MERGE_PATCH('{"a":1}');
Resultado:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_MERGE_PATCH'