Saltar al contenido principal

Cómo comparar dos archivos JSON

Pega los dos documentos JSON en los dos paneles de la herramienta Comparar JSON, compáralos y lee la lista de cambios que produce: adiciones, eliminaciones y cambios de valor, con el orden de las claves y los espacios en blanco ignorados. Todo se ejecuta en tu navegador; exporta el resultado como un parche RFC 6902 cuando necesites un registro de las diferencias legible por máquina.

Solo local
¿Solo quieres la herramienta? Abre Comparar JSONCompara dos JSON ignorando el orden de claves y exporta parchesAbrir herramienta

Cómo comparar dos archivos JSON: explicación

Dos documentos JSON rara vez discrepan a gritos. Uno tiene una clave que al otro le falta, uno anida su configuración un nivel más adentro, uno entrecomilla un número que el otro deja desnudo — y un diff línea a línea responde a cada una de esas diferencias cosméticas con un muro de rojo. Lo que en realidad quieres saber es más pequeño y más útil: qué valores cambiaron, qué claves aparecieron o desaparecieron, y si la estructura de la que dependes sigue teniendo la forma que esperas.

Esta página recorre el trabajo de principio a fin con la herramienta Comparar JSON del sitio: cuatro pasos, cada uno con una comprobación que puedes hacer antes de pasar al siguiente. Toda la comparación se ejecuta en tu navegador: los documentos se parsean en árboles de sintaxis localmente y nunca salen de la pestaña, y por eso el mismo procedimiento es seguro para configuraciones que contienen nombres de host, credenciales que ya rotaste o datos de clientes que preferirías no pegar en el campo de formulario de un desconocido.

Antes de empezar, ten claro qué te dirá la herramienta y qué no. Compara los dos documentos que le entregas: no sabe nada de la historia de git, de los despliegues ni de la intención. La lista de cambios es un hecho sobre dos documentos, no una explicación de quién cambió qué y por qué; los pasos de abajo incluyen dónde mirar cuando necesitas esa segunda mitad de la historia.

Cada paso de abajo ocurre en la herramienta Comparar JSON — dos paneles, una acción de comparación y una lista de cambios que ignora todo lo cosmético.

Si el vocabulario de objetos, arrays y claves te resulta nuevo, la guía sobre qué es JSON lo cubre en lenguaje llano antes de que compares nada.

Los pasos

  1. Abre la herramienta y carga el primer documento

    Abre la herramienta Comparar JSON y pon el primer documento en el panel izquierdo. Puedes pegarlo, arrastrar el archivo sobre el panel o cargar el ejemplo integrado si prefieres ensayar primero con datos de muestra. Los archivos los lee el propio navegador — en este procedimiento no hay paso de subida en ningún momento.

    Comprueba: El panel izquierdo acepta el documento sin error de parseo, lo que significa que el JSON era suficientemente válido para comparar. Un error de parseo ahí es la herramienta diciéndote qué línea corregir antes de que nada más funcione.

  2. Carga el segundo documento a la derecha

    Pon el segundo documento en el panel derecho de la misma manera. El orden importa para los nombres, no para la corrección: la izquierda es la referencia y la derecha es la versión que se compara contra ella, y el botón «Intercambiar» les cambia los puestos si elegiste mal el sentido. Cuando ambos lados estén cargados, ya puedes ejecutar la comparación.

    Comprueba: Ambos paneles contienen un documento y no un error. Si solo uno parsea, la comparación no puede empezar — corrige primero el lado que falla en lugar de comparar un documento contra nada.

  3. Compara y lee la lista de cambios

    Ejecuta la comparación. El resultado es una lista de diferencias reales: claves añadidas en un lado, claves eliminadas del otro y valores que cambiaron bajo una ruta de clave que no cambió. El orden de las claves y los espacios en blanco se ignoran a propósito — {"a":1,"b":2} y {"b":2,"a":1} son el mismo documento aquí, y decirlo es justo el punto de un diff semántico. Usa Alt+↑ y Alt+↓ para recorrer la lista sin usar el ratón.

    Comprueba: Un cambio que sabes que existe (renombra un valor a propósito antes de comparar, si quieres un ensayo) aparece como exactamente una fila, no como la reescritura de todas las líneas de alrededor. Esa es la señal de que estás leyendo semántica, no texto.

  4. Exporta las diferencias como un parche

    Cuando la lista sea correcta, expórtala como un JSON Patch RFC 6902 — un documento pequeño y ordenado que dice add, remove y replace para cada cambio. El parche es lo que convierte una sesión de lectura en un registro: pásaselo a un colega, adjúntalo a un ticket o aplícalo al documento izquierdo en otro lado y reproduce el lado derecho exactamente.

    Comprueba: El parche exportado es en sí mismo JSON válido y notablemente más pequeño que cualquiera de los dos documentos. Aplicarlo a una copia del documento izquierdo debería producir el derecho.

Lo que un diff semántico ignora deliberadamente

La herramienta parsea ambos documentos en árboles y compara los árboles, así que tres clases de diferencia nunca llegan a la lista de cambios. El orden de las claves: un objeto es un mapeo, no una secuencia, y ningún consumidor lee significado en el orden en que se escribieron sus claves. Los espacios en blanco insignificantes: la indentación y el espaciado son presentación, y reformatear un lado no debería producir ni un solo cambio. La grafía de los números cuando el valor es igual: 1 y 1.0 nombran el mismo número en las comparaciones que importan.

Lo que sí llega a la lista es todo lo que cambia lo que el documento significa: un valor que cambió, una clave que apareció o desapareció, un cambio de tipo — que la cadena "42" se convierta en el número 42 es un cambio real, y la herramienta lo clasifica como tal en vez de aceptarlo en silencio. Si falta un cambio que esperabas, la primera pregunta honesta es si era una de las tres diferencias cosméticas.

Arrays: emparejar por posición o por clave

Los arrays son el único lugar donde un diff semántico se ve obligado a elegir, porque ["a","b"] frente a ["b","a"] puede leerse de dos maneras: se movió todo, o no cambió nada y el orden es significativo. La herramienta te deja decidir: emparejar por índice trata el array como una secuencia, mientras que emparejar por un campo de clave primaria alinea los elementos por identidad, como haría una base de datos.

Para listas de registros (usuarios, hosts, eventos), emparejar por clave es casi siempre lo que quieres: insertar un registro nuevo arriba produce entonces una sola adición en lugar de dar por cambiada cada fila. Para listas donde el orden es el significado — los pasos de un procedimiento, resultados clasificados — emparejar por índice es la elección honesta. Elígelo a propósito en vez de dejar que el valor por defecto decida por ti.

Archivos grandes y dónde se ejecuta realmente el trabajo

La comparación se ejecuta en un Web Worker, fuera del hilo principal de la página, con un techo de 100 MB por documento. La consecuencia práctica es que un par grande sigue tardando segundos reales en compararse — pero la pestaña sigue viva mientras trabaja, y puedes seguir desplazándote por la lista de cambios ya en pantalla en lugar de mirar una página congelada.

El modo de combinación de tres vías — donde un documento base se une a dos ramas editadas — calcula dentro de la propia página y, por esa razón, se detiene en 8 MB. Si tus entradas de combinación son más grandes, la comparación de dos documentos de arriba sigue disponible a tamaño completo.

Cuando un diff de JSON es el instrumento equivocado

Dos documentos en formatos distintos — una configuración JSON y una traducción suya a YAML — necesitan que uno se convierta primero, o el diff gastará todas sus filas en decir que los contenedores difieren. Convierte un lado al formato del otro y compara. Y cuando la pregunta no tiene estructura alguna — dos archivos de log, dos párrafos de prosa — la comparación de texto plano es la herramienta correcta, y la maquinaria de JSON no aporta más que ruido.

Lo inverso también vale: si te encuentras leyendo una lista de cambios y narrando la intención en voz alta — "aquí fue donde movieron el timeout" — el diff ya cumplió su trabajo y el registro del cambio pertenece a algún lugar estructurado. La exportación RFC 6902 existe precisamente para que la sesión de lectura pueda terminar con un artefacto en vez de un recuerdo.

Preguntas frecuentes

¿Se suben mis archivos JSON cuando los comparo aquí?

No. Ambos documentos se parsean y se comparan dentro de la pestaña de tu navegador — el motor de comparación se ejecuta en un Web Worker en tu máquina y no existe ningún endpoint de subida al que mandarlos. Puedes confirmarlo en DevTools: abre el panel de red, ejecuta una comparación y ninguna petición lleva tus datos. La Content-Security-Policy de la página también rechaza las conexiones salientes por construcción.

¿Por qué reordenar claves no aparece como una diferencia?

Porque un objeto es un mapeo, no una lista ordenada — {"a":1,"b":2} y {"b":2,"a":1} contienen exactamente la misma información, y cualquier parser de JSON construye el mismo árbol a partir de ambos. Un diff que reporta reordenaciones de claves está reportando formato, que es ruido para quien quiere saber qué cambió semánticamente. Los espacios en blanco se ignoran por la misma razón.

¿Qué es un parche RFC 6902 y para qué exportar uno?

RFC 6902 define JSON Patch: un documento JSON que enumera operaciones — add, remove, replace, move, copy, test — cada una apuntando a una ruta concreta. Exportar tu comparación como uno convierte la lista de cambios en un registro aplicable por una máquina: el mismo parche aplicado al documento izquierdo reproduce el lado derecho, y eso lo vuelve una entrega precisa para un colega, un fixture de pruebas o un script de migración.

¿De qué tamaño pueden ser los dos archivos JSON?

Hasta 100 MB por documento. El parseo y la comparación se ejecutan en un Web Worker, así que un par grande tarda su tiempo real pero no congela la pestaña — la interfaz sigue respondiendo y las filas ya renderizadas siguen desplazándose mientras el worker trabaja. El modo de combinación de tres vías, aparte, tiene su propio techo, menor: 8 MB, porque ese cálculo corre en el hilo principal de la página.

¿Puede comparar arrays sin dar por cambiada cada fila?

Sí — ese es el ajuste de emparejamiento de arrays. El emparejamiento por índice compara el elemento 0 con el elemento 0 y es el correcto cuando el orden carga significado. El emparejamiento por clave alinea los elementos por un campo que tú eliges (un id, un slug, un hostname) y es el correcto para listas de registros, donde insertar una fila nueva debería producir un cambio, no la reescritura de la lista. El ajuste existe porque ninguna de las dos respuestas es correcta para todos los arrays.

¿El diff me dice qué cambio ocurrió primero, o quién lo hizo?

No — y ningún diff puede. Una comparación ve dos documentos, no una línea de tiempo: sabe que un valor cambió, y no puede saber cuándo, ni por quién, ni por qué. Esa historia vive en el control de versiones, en los logs de despliegue o en el proceso que haya editado el archivo. La exportación del parche es el puente: adjúntalo al ticket o al commit donde se cuenta esa historia.