Comparador de JSON (Diff)

Pega dos documentos JSON y ve exactamente qué cambió entre ellos - cada clave añadida, eliminada o modificada, a cualquier profundidad, identificada por su ruta exacta como user.address.city o items[2].price. A diferencia de un diff de texto normal, el orden de las claves y el formateo del espacio en blanco nunca cuentan como diferencia aquí - solo los datos reales importan.

4 diferencias+2 añadido~2 cambiado
  • Añadidodiscontinued

    + false

  • Cambiadoprice

    − 19.99

    + 24.99

  • Añadidotags[2]

    + "sale"

  • Cambiadoversion

    − "1.2.0"

    + "1.3.0"

Comparación por estructura, no por línea - reordenar claves o reformatear espacios nunca aparece como diferencia, solo los cambios reales en los datos.

Preguntas frecuentes

¿En qué se diferencia esto de un diff de texto normal?

Un diff de texto (como el propio Comparador de Diferencias de Texto de este sitio) compara dos bloques de texto línea por línea - no sabe qué es JSON, así que reformatear un documento, reordenar sus claves o cambiar la indentación muestra un muro de líneas cambiadas aunque los datos subyacentes sean idénticos. Esta herramienta primero analiza ambos lados como JSON real, y luego compara las estructuras resultantes - así {"a":1,"b":2} y una versión formateada con «b» listado antes que «a» se reportan correctamente como sin diferencias. Solo se muestran adiciones, eliminaciones y cambios de valor reales.

¿Cuál es la diferencia entre un valor «cambiado» y uno con «tipo cambiado»?

«Cambiado» significa que el valor en esa ruta sigue siendo del mismo tipo JSON pero tiene un valor distinto - un número que pasó de 5 a 6, o una cadena que pasó de «borrador» a «publicado». «Tipo cambiado» significa que el tipo mismo es diferente - un campo que era booleano ahora es una cadena, o un número se volvió null. Esa distinción importa mucho en la práctica: un cambio de tipo tiene muchas más probabilidades de romper código que lee ese campo (una función que espera un booleano fallará si de repente recibe una cadena), así que esta herramienta lo marca por separado en vez de mezclarlo con una actualización de valor normal.

¿Cómo se comparan los arrays?

Elemento por elemento, en orden: el índice 0 contra el índice 0, el índice 1 contra el índice 1, y así sucesivamente, con cualquier elemento extra al final del array más largo reportado como añadido o eliminado. Esto es simple y predecible, pero significa que insertar un nuevo elemento en medio de un array hará que todos los elementos posteriores parezcan cambiados, aunque en realidad sean idénticos - porque todos se han desplazado una posición. Esa es una limitación real de la comparación de arrays basada en posición en general (no solo de esta herramienta), así que para arrays cuyo orden puede cambiar, suele ayudar revisar si los elementos reportados como «cambiados» son realmente distintos o solo están desplazados.

¿Qué pasa si mi JSON no es válido?

Se muestra el error de análisis exacto que produce el propio analizador JSON de tu navegador debajo de ese cuadro de texto, en vez de fallar silenciosamente o mostrar un resultado desactualizado. Las causas comunes son una coma sobrante después del último elemento de un objeto o array (válida en literales de objeto de JavaScript, inválida en JSON), comillas faltantes alrededor de un nombre de clave, o un comentario perdido - JSON no tiene ninguna sintaxis de comentarios, a diferencia de JavaScript o JSON5.

¿Puedo usarlo para comparar respuestas de API?

Sí, y es uno de los usos más útiles: pega una respuesta capturada antes de un cambio y otra capturada después, y cada campo que fue añadido, eliminado o - de forma crucial - cambió de tipo queda marcado. Un campo que cambia silenciosamente de número a cadena, o de booleano a null, es exactamente el tipo de cambio disruptivo fácil de pasar por alto a simple vista en dos payloads grandes, pero aquí aparece de inmediato como una entrada distinta de «tipo cambiado».

¿Importa el orden en que aparecen las claves?

No, nunca - dos objetos JSON con las mismas claves y valores se tratan como idénticos sin importar en qué orden estén escritas esas claves, ya que JSON en sí no define ningún significado para el orden de las claves. Esto también significa que un documento JSON minificado de una sola línea y una versión bien indentada de exactamente los mismos datos mostrarán correctamente cero diferencias aquí.

¿Se envían mis datos JSON a algún lado?

No. Ambos documentos se analizan y comparan enteramente en tu navegador usando JavaScript puro - nada se sube a un servidor, así que es seguro pegar respuestas reales de API, archivos de configuración u otros datos que no quisieras que salieran de tu máquina.

¿Puedo comparar archivos JSON muy grandes?

Maneja cómodamente respuestas de API y archivos de configuración típicos - desde unas pocas líneas hasta varios miles - ya que toda la comparación se ejecuta de forma síncrona en tu pestaña del navegador. Para documentos realmente enormes (decenas de megabytes), el recorrido recursivo por cada clave e índice de array puede volverse notablemente lento; si eso ocurre, suele ayudar reducir ambos documentos solo a la sección que realmente te interesa antes de compararlos.

¿Puede reemplazar a un git diff para archivos de configuración JSON?

Responden preguntas distintas y funcionan bien juntos en vez de como sustitutos. Un diff de control de versiones es textual - muestra las líneas exactas que cambiaron en el archivo, incluyendo un reformateo, una reindentación, o un linter reordenando claves, nada de lo cual esta herramienta considera una diferencia real. Esta herramienta responde una pregunta más específica, a menudo más útil después de que un formateador o un archivo autogenerado tocó algo: ¿cambió realmente la configuración, o solo cambió su formato? Ejecutar ambas juntas sobre un commit sospechoso es una forma rápida de distinguir «nada de qué preocuparse, solo se reformateó» de «esto realmente cambia el comportamiento».

¿Qué pasa si los dos documentos tienen tipos raíz distintos, como un array frente a un objeto?

Sigue funcionando - si el nivel más alto en sí difiere en forma (un objeto en un lado, un array en el otro, o un valor primitivo frente a cualquiera de los dos), eso se reporta como una sola diferencia a nivel raíz en vez de que la herramienta fuerce una comparación que no tiene sentido. La misma lógica que marca el cambio de tipo de un campo anidado se aplica a la raíz: se trata como el tipo de diferencia más fundamental que pueden tener dos documentos JSON.

¿Esto también valida o formatea mi JSON?

Solo como efecto secundario - cada lado se analiza para compararlo, así que un documento inválido muestra un error de análisis en vez de comparar silenciosamente nada. Pero el trabajo de esta herramienta es comparar dos documentos que ya son JSON válido, no reformatear o corregir automáticamente uno solo. Si necesitas validar, reformatear o minificar un solo documento JSON, el Formateador y Validador de JSON de este sitio está hecho específicamente para eso y es un primer paso natural antes de pegar un documento aquí.

Herramientas relacionadas