Evaluador JSON Merge Patch (RFC 7396) | Resultado fusionado y traza paso a paso
Pega un JSON objetivo y un JSON patch para aplicar las reglas de fusión de RFC 7396, ver el documento resultante y leer una traza ordenada de cada operación de establecer, eliminar y reemplazar la raíz.
💡 Sobre esta herramienta
Cuando diseñas o revisas un endpoint HTTP PATCH, lo normal es querer saber qué hace realmente un cuerpo de patch sobre el recurso almacenado antes de lanzar una petición real. RFC 7396 (JSON Merge Patch) parece sencillo —envías un objeto parcial y el servidor lo fusiona— pero los casos límite confunden: null elimina un miembro, las claves ausentes quedan intactas, los objetos anidados se fusionan de forma recursiva y los arrays se reemplazan por completo en lugar de fusionarse.
Esta herramienta despeja esa duda. Pega el objetivo y el patch, y verás el JSON fusionado junto con una lista numerada de lo que cambió: establecer /title = "Hello World", eliminar /author/email, y así sucesivamente. Esa traza es el diferencial: en vez de comparar dos bloques a ojo, lees las operaciones exactas que produjo la fusión, lo que facilita confirmar que la especificación de un PATCH hace lo esperado.
🧐 Preguntas Frecuentes
Q. ¿En qué se diferencia de JSON Patch (RFC 6902)?
RFC 6902 es un array de operaciones explícitas —add, remove, replace, move, copy, test— y puede apuntar a un índice concreto de un array. RFC 7396 es declarativo: envías un objeto parcial que describe el estado deseado. Es más compacto, pero no permite editar arrays parcialmente ni establecer un valor a null. Esta herramienta implementa solo RFC 7396.
Q. ¿Puedo modificar un solo elemento dentro de un array? No. Bajo RFC 7396 los arrays son valores opacos, así que cualquier array en el patch reemplaza por completo el array del objetivo. Si necesitas cambios a nivel de elemento, esa es la señal para usar RFC 6902.
Q. ¿Qué pasa si pongo a null una clave que el objetivo no tiene?
Nada. Si la clave no existe en el objetivo, el null no hace nada: no se elimina ni se registra en la traza.
Q. ¿Y si el patch es un escalar o un array en lugar de un objeto? El patch completo reemplaza el objetivo (RFC 7396 §2) y la traza muestra una única entrada de "reemplazar raíz". Un cuadro vacío se trata como null.
Q. ¿Se conserva el orden de las claves? La salida está formateada, así que las claves nuevas pueden aparecer hacia el final. RFC 7396 no fija el orden de las claves, de modo que compara los resultados por equivalencia semántica, no byte a byte.
📚 Cómo leer el algoritmo de fusión
El algoritmo de RFC 7396 cabe en pocas líneas y vale la pena entenderlo para no llevarse sorpresas: si el patch es un objeto, se recorre miembro a miembro; para cada miembro, un valor null elimina la clave del objetivo, un objeto provoca una fusión recursiva y cualquier otro valor (escalar o array) reemplaza directamente. Si el patch no es un objeto, el objetivo entero se sustituye. Visto así, la regla más fácil de olvidar es la recursión: solo los objetos descienden; en cuanto encuentras un escalar o un array, la rama se detiene y el valor se reemplaza tal cual. Por eso ver la traza ordenada ayuda a estudiar el comportamiento y a comprobar dónde se corta la recursión.