Compara dos documentos JSON por estructura y no por lineas. Informa de rutas anadidas, eliminadas y modificadas, con opcion de ignorar el orden de los arrays. Todo se ejecuta en tu navegador.
Compara por estructura, no por lineas. Pega dos documentos y obten un informe ruta por ruta de lo que se ha anadido, eliminado o modificado. Como la comparacion recorre los valores ya analizados, reformatear o reordenar claves no aparece como diferencia.
–
Diferencias
Por que un diff de texto es la herramienta equivocada para JSON
Los diffs por lineas ven formato, no significado
Un diff clasico por lineas trata el JSON como si fuera prosa. Cambia la sangria de dos a cuatro espacios y todas las lineas apareceran modificadas. Mueve una clave del principio al final de un objeto y obtendras un borrado mas una insercion, aunque el valor analizado sea exactamente el mismo. Colapsa un array largo en una sola linea y se enciende el bloque entero.
Un diff estructural analiza primero ambos lados y despues recorre los valores resultantes. Cuando empieza la comparacion, el formato, el orden de las claves y los espacios ya han desaparecido, asi que lo unico que puede informarse son diferencias reales en los datos. Por eso la salida es lo bastante corta como para leerla de verdad.
Rutas, no numeros de linea
Cada diferencia se informa contra una ruta como user.roles[2] o meta.updated. Una ruta sobrevive a los cambios en otras partes del documento, cosa que un numero de linea no hace, asi que puedes pegar el mismo informe en un ticket o en una revision de codigo y una semana despues seguira apuntando al lugar correcto.
Las tres operaciones se corresponden con lo que puede ocurrirle a un arbol. Una clave presente a la izquierda y ausente a la derecha es una eliminacion; lo contrario es una adicion; y una clave presente en ambos con distinto valor es una modificacion. Los cambios de tipo (un campo que era el numero 1 y ahora es la cadena "1") tambien se informan como modificaciones, y conviene prestarles atencion porque son una fuente habitual de errores aguas abajo que ninguna validacion de esquema detecta.
Arrays y la cuestion del orden
Los arrays son donde el diff estructural se vuelve opinable. Por defecto la comparacion es posicional: el indice 0 de la izquierda se compara con el indice 0 de la derecha. Eso es correcto para datos ordenados como una secuencia de pasos, pero produce un resultado enganoso para una lista que en realidad es un conjunto: al reordenar los elementos, todas las posiciones parecen modificadas.
La opcion de ignorar el orden canonicaliza ambos lados ordenando los arrays en profundidad antes de comparar, de modo que una lista reordenada resulta igual. Usala para listas de etiquetas, conjuntos de permisos y resultados de consulta sin orden garantizado. Dejala desactivada siempre que la posicion de un elemento tenga significado, porque con ella activa un error real de ordenacion se vuelve invisible.
Preguntas frecuentes
¿En que se diferencia de un diff de texto normal?
Un diff de texto compara lineas, asi que resangrar o reordenar claves aparece como cambio. Esta herramienta analiza antes ambos lados, de modo que solo informa de diferencias reales en los datos.
¿Que significan los simbolos +, - y ~?
El mas es una ruta presente solo en el documento modificado, el menos solo en el original, y la virgulilla una ruta presente en ambos con distinto valor.
¿Por que un array reordenado aparece como modificado?
Por defecto los arrays se comparan posicion a posicion, lo cual es correcto para datos ordenados. Activa ignorar el orden para compararlos como conjuntos sin orden.
¿Importa el orden de las claves de un objeto?
No. Los objetos se comparan por clave, asi que mover un campo dentro de un objeto nunca genera una diferencia. Solo la posicion de los elementos de un array es sensible al orden.
¿Se senala un numero que se ha convertido en cadena?
Si. Un cambio de tipo se informa como modificacion, y es deliberado: 1 y "1" se comportan de forma muy distinta aguas abajo y el desajuste es facil de pasar por alto.
¿Se envian mis documentos a un servidor?
No. Ambos lados se analizan y comparan en tu navegador, asi que nada se sube, se registra ni se almacena.