Comparar documentos JSON y generar un parche

Pega las versiones anterior y nueva para comparar su estructura. Los arrays se comparan por índice; revisa los elementos reordenados antes de aplicar el parche.

Se ejecuta localmente en tu navegador
Before
After
Changes
  • Compare two documents to inspect structural changes.
JSON Patch RFC 6902 operation list
Compare two JSON documents to generate a JSON Patch.

Los arrays se comparan por índice. Revisa los parches cuando haya arrays reordenados o campos de identidad propios del dominio antes de aplicarlos a un documento de producción.

Cómo comparar dos documentos JSON

Pega el documento original a la izquierda y la versión editada a la derecha, pulsa Comparar y la página informa de cada valor añadido, eliminado y modificado con su ruta: 7.143 cambios entre dos objetos de 50.000 claves, listados en el orden del recorrido.

El resultado es un JSON Patch (RFC 6902) que convierte el primer documento en el segundo: un array de operaciones add, remove y replace con rutas JSON Pointer. Los dos paneles se analizan y se comparan dentro de la página, así que no se sube nada y la comparación sigue funcionando cuando se cae la red.

  1. Pega el documento anterior en el panel izquierdo y el posterior en el derecho. Cargar ejemplo rellena ambos con un par pequeño si quieres ver antes la forma de la salida.
  2. Pulsa Comparar. Encima de la lista aparecen los contadores —añadidos, eliminados, cambiados— y cada fila lleva el puntero al valor y una vista previa limitada a 120 caracteres.
  3. Lee el parche de debajo: es el documento RFC 6902 completo, indentado, listo para pegarlo en una suite de pruebas, un script de migración o una petición HTTP PATCH.
  4. Copiar parche lo lleva al portapapeles y Limpiar vacía los dos paneles. Si un panel no se puede analizar, la línea de estado indica qué documento falla —Before JSON o After JSON— con la posición del error, y descarta el resultado anterior.

Qué dice el parche y qué deja fuera

Qué cuenta como diferencia

El orden de las claves no es una diferencia: {"a":1,"b":2} frente a {"b":2,"a":1} da 0 cambios. Los números se comparan como dobles de JavaScript, por eso 1 y 1.0 son el mismo valor, mientras que 1e2 llega como 100 y aparece como un cambio.

Los tipos nunca se convierten: 1 frente a "1" es un cambio, true frente a 1 también, y una clave con null no es lo mismo que una clave ausente —null en el primer documento y ausente en el segundo da remove /a en lugar de coincidencia—. Las claves duplicadas conservan el último valor, porque el panel se lee con JSON.parse: {"a":1,"a":2} frente a {"a":2} informa de 0 cambios.

Los arrays se comparan por índice

La salida no contiene ninguna operación move. Un array se recorre posición a posición, así que reordenar aparece como una serie de replace: [1,2] frente a [2,1] da replace /0 con 2 y replace /1 con 1.

Los cambios de longitud se emiten desde el final: [1,2,3,4] frente a [1,2] elimina primero /3 y después /2, y [1,2] frente a [1,2,3,4] añade /2 y /3. Con ese orden cada operación sigue siendo válida al aplicar el parche de arriba abajo.

Punteros, escapes y claves vacías

Cada ruta es un JSON Pointer conforme a la RFC 6901. Una clave con barra o tilde se escapa: a/b aparece como /a~1b y c~d como /c~0d.

Una clave vacía también recibe puntero —la ruta es /— y el documento raíz tiene la ruta vacía, de modo que sustituirlo entero es una sola operación con path "".

Dónde se ejecuta la comparación

El análisis y la comparación ocurren en la página. Al cargar la herramienta y comparar dos objetos de 50.000 claves no salió ninguna petición más allá de los recursos propios de la página, así que los documentos no salen del navegador; una vez cargada, la herramienta funciona sin conexión.

Se heredan los límites del analizador JSON: los enteros por encima de 2^53 pierden precisión, de modo que 9007199254740993 y 9007199254740992 se consideran idénticos, y un anidamiento de 20.000 niveles se comparó y se parcheó sin error. El tiempo depende del número de cambios: 50.000 claves tardaron medio segundo y dieron un parche de 511 KB, y 500.000 claves unos cinco segundos y 5,25 MB. Revisa el parche antes de aplicarlo a datos de producción.

Herramientas recientes: