Herramienta de Comparación JSON - Compare JSON en Línea Gratis | Diferencias JSON
Compare JSON en línea gratis con nuestra rápida herramienta de comparación JSON. Encuentre diferencias al instante con resultados codificados por colores. Diff JSON 100% seguro basado en navegador. No se requiere registro.
Herramienta de Diferencias JSON
Documentación
Una herramienta de comparación de JSON, a menudo llamada herramienta de diferencias de JSON, compara dos valores JSON (JavaScript Object Notation) e informa de los cambios que hay entre ellos. Enumera cada propiedad o elemento de matriz añadido, eliminado o modificado, junto con su ubicación exacta en los datos. Esta página explica cómo funciona la herramienta de comparación de JSON de whiz.tools, con ejemplos prácticos basados en su lógica de comparación real.
¿Qué es la comparación de JSON?
La comparación de JSON es el proceso de revisar dos documentos JSON entre sí para encontrar diferencias. Un documento JSON es un fragmento de texto formado por objetos (pares clave-valor entre llaves), matrices (listas ordenadas entre corchetes) y valores primitivos, como cadenas, números, valores booleanos y null. Comparar estos documentos visualmente resulta lento y propenso a errores cuando superan unas pocas líneas, por lo que una herramienta de comparación realiza la correspondencia automáticamente y resalta cada cambio.
Los desarrolladores utilizan este tipo de comparación para comprobar respuestas de API, realizar un seguimiento de los cambios en archivos de configuración, verificar que una migración de datos no haya perdido información y revisar cambios en archivos JSON bajo control de versiones.
Cómo compara la herramienta dos valores JSON
La herramienta analiza ambas entradas con un analizador JSON estándar y, después, recorre conjuntamente los dos valores resultantes, un nivel cada vez. En cada paso plantea tres preguntas, en este orden:
- ¿Los dos valores tienen tipos diferentes (por ejemplo, uno es un objeto y el otro un número), o uno es
nullmientras que el otro no lo es? En ese caso, registra una modificación en ese punto y deja de comparar los niveles más profundos. - ¿Ambos valores son primitivos (una cadena, un número, un valor booleano o
null)? En ese caso, los compara directamente. Cualquier diferencia, incluido el cambio del número123a la cadena"123", cuenta como una modificación. - ¿Ambos valores son objetos o ambas son matrices? En ese caso, compara su contenido mediante las reglas siguientes y vuelve a recorrer cualquier objeto o matriz anidado.
Cada diferencia se registra con una ruta, como user.address.city o tags[1], para que sea fácil encontrarla en el documento original. Los miembros de los objetos se unen mediante un punto y los elementos de las matrices se muestran con su índice entre corchetes. Una diferencia en la parte superior del documento, como una matriz sustituida por un objeto, no tiene una ruta dentro de los datos, por lo que se etiqueta como $. Este es el identificador raíz definido por RFC 9535, el estándar JSONPath, y representa el documento completo.
Comparación de objetos
Para comparar dos objetos JSON, la herramienta recopila todas las claves que aparecen en cualquiera de los dos objetos. Para cada clave:
- Si la clave solo existe en el segundo objeto, es una propiedad añadida.
- Si la clave solo existe en el primer objeto, es una propiedad eliminada.
- Si la clave existe en ambos, la herramienta compara los dos valores de forma recursiva.
El orden de las claves no importa. El estándar JSON no define un orden para los miembros de los objetos, por lo que {"a":1,"b":2} y {"b":2,"a":1} se consideran idénticos.
Comparación de matrices
Las matrices se comparan por posición, no por contenido. La herramienta recorre ambas matrices índice por índice y compara lo que haya en cada índice, hasta alcanzar la longitud de la matriz más larga. Si una matriz es más corta, los elementos adicionales del final de la matriz más larga se indican como añadidos o eliminados.
Esto significa que la herramienta nunca intenta emparejar los elementos de una matriz por su contenido. No detecta que un objeto se haya «movido» del índice 1 al índice 2; solo observa que el valor de cada índice ha cambiado. Eliminar o insertar un elemento en el centro de una matriz desplaza un lugar todos los elementos siguientes, por lo que normalmente aparece como varias modificaciones independientes en lugar de una única adición o eliminación clara.
Ejemplos prácticos
Ejemplo 1: comparar dos objetos
Primer JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Segundo JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Resultado:
- Modificado
user.address.city:"New York"→"Boston" - Modificado
user.address.zip:"10001"→"02108"
Ejemplo 2: cambio al final de una matriz
Primer JSON:
1{ "tags": ["important", "urgent", "review"] }
2Segundo JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2El índice 0 no cambia, el índice 1 cambia, el índice 2 no cambia y el índice 3 solo existe en la segunda matriz. Resultado:
- Modificado
tags[1]:"urgent"→"critical" - Añadido
tags[3]:"documentation"
Ejemplo 3: eliminar un elemento del centro de una matriz
Este ejemplo muestra qué ocurre cuando se elimina un elemento del centro de una matriz, ya que es una fuente habitual de confusión.
Primer JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Segundo JSON, con la entrada «Mouse» eliminada y una entrada «Monitor» añadida al final:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8Una persona que observara esto diría: «Mouse se eliminó y Monitor se añadió». Como la herramienta compara estrictamente por índice, no lo interpreta así. Compara el índice 0 con el índice 0, el índice 1 con el índice 1 y el índice 2 con el índice 2, de modo que cada campo posterior al elemento eliminado queda alineado con el objeto equivocado. El resultado real son 7 modificaciones:
- Modificado
products[0].price:999.99→899.99 - Modificado
products[1].id:2→3 - Modificado
products[1].name:"Mouse"→"Keyboard" - Modificado
products[1].price:24.99→59.99 - Modificado
products[2].id:3→4 - Modificado
products[2].name:"Keyboard"→"Monitor" - Modificado
products[2].price:59.99→349.99
Para obtener un resultado más claro al comparar listas de este tipo, ordene ambas matrices de la misma manera o asígneles claves antes de pegarlas; por ejemplo, escriba cada lista en el mismo orden o empareje los objetos mediante un campo de ID antes de compararlos.
Qué no hace la herramienta
- No empareja los elementos de las matrices por su contenido. Como se muestra arriba, compara únicamente por posición de índice, por lo que no puede reconocer que un elemento se haya movido en lugar de haber cambiado.
- No detecta referencias circulares. En la práctica, esto no supone una limitación: ambas entradas proceden de
JSON.parse, que siempre crea un árbol simple y nunca puede producir un valor que se refiera a sí mismo. Las referencias circulares no pueden existir en texto JSON válido. - No ofrece una opción para ordenar las matrices antes de compararlas. Reordenar los elementos de la entrada antes de pegarlos es la única manera de evitar el efecto de desplazamiento de índices descrito arriba.
Cómo utilizar la herramienta
- Pegue el primer documento JSON en el cuadro izquierdo y el segundo en el derecho.
- La herramienta los compara automáticamente cuando ambos cuadros contienen texto, o haga clic en «Comparar» para ejecutarla manualmente.
- Lea la lista de resultados. Cada línea muestra una ruta, como
user.age, e indica si el elemento se añadió, eliminó o modificó, con los valores anterior y nuevo mostrados uno al lado del otro. - Haga clic en «Copiar» para copiar los resultados como texto sin formato.
Si un cuadro contiene texto que no es JSON válido, la herramienta muestra un error debajo de ese cuadro en lugar de realizar una comparación. Cuando ambos cuadros no son válidos, los dos errores aparecen a la vez.
Preguntas frecuentes
¿Qué cuenta como una diferencia entre dos valores JSON?
Una propiedad o un elemento de matriz es diferente si solo existe en uno de los dos documentos, o si existe en ambos pero contiene un valor o tipo diferente. Cambiar el valor del número 5 a la cadena "5" cuenta como una modificación, aunque puedan parecer similares.
¿Importa el orden de los elementos?
Depende del contenedor. Los objetos JSON no tienen un orden de miembros definido, por lo que dos objetos con las mismas claves y valores en un orden diferente se consideran idénticos. Las matrices sí están ordenadas y la herramienta las compara por posición de índice, de modo que mover un elemento a otra posición se informa como una serie de modificaciones, no como un desplazamiento.
¿Qué significa que la ruta de un resultado sea $?
Significa que ha cambiado el documento completo, no una parte concreta. Esto ocurre cuando las dos entradas son tipos de valor diferentes en el nivel superior, por ejemplo, una matriz en un lado y un objeto en el otro, o los números simples 1 y 2. $ es el identificador raíz de RFC 9535, el estándar JSONPath.
¿Se envían mis datos JSON a un servidor?
No. La comparación se ejecuta en el navegador mediante JavaScript. No se carga ningún dato.
¿Afecta al resultado el formato, como la sangría o la minificación?
No. Ambas entradas se analizan como valores JSON antes de compararlas, por lo que los espacios en blanco, la sangría y los saltos de línea no influyen. Solo se comparan los datos reales.
¿Puede la herramienta comparar JSON con comentarios o comas finales?
No. El JSON estándar, tal como se define en RFC 8259, no permite comentarios ni comas finales. Las entradas que los contienen se rechazan como no válidas.
Referencias
- IETF. «JavaScript Object Notation (JSON) Data Interchange Format». RFC 8259, diciembre de 2017.
- IETF. «JavaScript Object Notation (JSON) Patch». RFC 6902, abril de 2013.
- IETF. «JSONPath: Query Expressions for JSON». RFC 9535, febrero de 2024. (La sección 2.2 define el identificador raíz
$). - Mozilla Developer Network. «JSON.parse()».