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'