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, llamada a menudo herramienta de diferencias de JSON, compara dos valores JSON (JavaScript Object Notation) e informa de lo que cambió entre ellos. Enumera cada propiedad o elemento de matriz que se añadió, se eliminó o se modificó, 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 resueltos 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 contrastar dos documentos JSON para encontrar diferencias. Un documento JSON es un texto formado por objetos (pares clave-valor entre llaves), matrices (listas ordenadas entre corchetes) y valores primitivos, como cadenas, números, booleanos y null. Comparar dos de estos documentos a simple vista es lento y propenso a errores en cuanto superan unas pocas líneas, por lo que una herramienta de comparación hace la correspondencia automáticamente y resalta cada cambio.
Los desarrolladores usan este tipo de comparación para revisar respuestas de API, seguir los cambios en archivos de configuración, comprobar que una migración de datos no perdió información y revisar los 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 luego recorre los dos valores resultantes a la vez, nivel por nivel. En cada paso se plantea tres preguntas, por orden:
- ¿Los dos valores son de tipos distintos (por ejemplo, uno es un objeto y el otro un número), o uno es
nully el otro no? En ese caso, registra una modificación en ese punto y deja de comparar a mayor profundidad. - ¿Ambos valores son primitivos (una cadena, un número, un booleano o null)? En ese caso, los compara directamente. Cualquier diferencia, incluido el paso del número
123a la cadena"123", cuenta como una modificación. - ¿Ambos valores son objetos o ambos son matrices? En ese caso, compara su contenido con las reglas siguientes y desciende a los objetos o matrices anidados.
Cada diferencia se registra con una ruta, como user.address.city o tags[1], para que sea fácil localizarla en el documento original.
Comparación de objetos
Con dos objetos JSON, la herramienta reúne todas las claves que aparecen en alguno de los dos. Para cada clave:
- Si la clave existe solo en el segundo objeto, se trata de una propiedad añadida.
- Si la clave existe solo en el primer objeto, se trata de 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 define un objeto como una colección no ordenada de pares nombre/valor y una matriz como una secuencia ordenada, 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 hay en cada uno, hasta la longitud de la matriz más larga. Si una matriz es más corta, los elementos sobrantes al final de la más larga se informan como añadidos o eliminados.
Esto significa que la herramienta nunca intenta emparejar los elementos de una matriz por su contenido. No advierte que un objeto se «movió» del índice 1 al índice 2; solo ve que el valor de cada índice cambió. Eliminar o insertar un elemento en medio de una matriz desplaza una posición a todos los elementos siguientes, por lo que suele aparecer como varias modificaciones separadas y no como una única adición o eliminación limpia.
Ejemplos resueltos
Ejemplo 1: comparación de 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: un 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 cambió, 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: eliminación de un elemento del medio de una matriz
Este ejemplo muestra lo que ocurre cuando se elimina un elemento del medio de una matriz, porque es una fuente frecuente 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 viera esto diría: «Se eliminó Mouse y se añadió Monitor». 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 se alinea con el objeto equivocado. El resultado real son siete 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 limpio al comparar listas como esta, conviene ordenar o indexar ambas matrices de la misma manera antes de pegarlas, por ejemplo escribiendo cada lista en el mismo orden o emparejando los objetos por un campo de identificador antes de la comparación.
Lo que la herramienta no hace
- No empareja los elementos de una matriz por su contenido. Como se mostró antes, compara solo por posición de índice, por lo que no puede reconocer que un elemento se movió en lugar de cambiar.
- No detecta referencias circulares. En la práctica esto no es una limitación: ambas entradas proceden de
JSON.parse, que siempre construye un árbol simple y nunca puede producir un valor que se refiera a sí mismo. Las referencias circulares no pueden existir en un texto JSON válido. - No ofrece una opción para ordenar las matrices antes de comparar. Reordenar los elementos de la entrada antes de pegarla es la única forma de evitar el efecto de desplazamiento de índices descrito arriba.
Cómo utilizar la herramienta
- Pegar el primer documento JSON en el cuadro izquierdo y el segundo en el cuadro derecho.
- La herramienta los compara automáticamente cuando ambos cuadros contienen texto, o se puede pulsar Comparar para ejecutarla manualmente.
- Leer la lista de resultados. Cada línea muestra una ruta, como
user.age, e indica si se añadió, se eliminó o se modificó, con los valores antiguo y nuevo uno junto al otro. - Pulsar Copiar para copiar los resultados como texto sin formato.
Si alguno de los cuadros contiene texto que no es JSON válido, la herramienta muestra un error para ese cuadro en lugar de una comparación.
Preguntas frecuentes
¿Qué cuenta como una diferencia entre dos valores JSON?
Una propiedad o un elemento de matriz es distinto si existe en solo uno de los dos documentos, o si existe en ambos pero contiene un valor o un tipo diferente. Cambiar un valor del número 5 a la cadena "5" cuenta como una modificación, aunque se vean parecidos.
¿Importa el orden de las propiedades de un objeto? No. Los objetos JSON no tienen un orden de miembros definido, por lo que dos objetos con las mismas claves y valores en distinto orden se consideran idénticos.
¿Importa el orden de los elementos de una matriz? Sí. Las matrices se comparan por posición de índice, así que mover un elemento a otra posición de la matriz se trata como una serie de modificaciones y no como un desplazamiento.
¿Se envían mis datos JSON a un servidor? No. La comparación se ejecuta en el navegador con JavaScript. No se sube nada.
¿El formato, como la sangría o la minificación, afecta al resultado? No. Ambas entradas se analizan como valores JSON antes de la comparación, 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 lo define la RFC 8259, no tiene sintaxis para comentarios, y las matrices y los objetos no pueden llevar comas finales. El analizador JSON del navegador rechaza esa entrada por no ser válida.
Referencias
- Internet Engineering Task Force. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 — los objetos son colecciones no ordenadas de pares nombre/valor, las matrices son secuencias ordenadas y la gramática solo permite espacios en blanco entre los elementos léxicos.
- Mozilla Developer Network. JSON.parse(). Referencia de JSON.parse() — un JSON no válido lanza un SyntaxError, y las matrices y los objetos no pueden llevar comas finales.