En esta página
Para interpretar las diferencias entre dos JSON, aplica tres reglas: JSON Diff ignora los espacios de formato y el orden de las propiedades de objetos, compara los arrays por índice y distingue un campo ausente de uno presente con null. El comparador interpreta los valores JSON; no compara líneas. Usa estas reglas para anticipar el resumen de cada par antes de probarlo.
| Qué cambia entre las entradas | Cómo lo compara JSON Diff | Qué resultado esperar |
|---|---|---|
| Sangría, saltos de línea u orden de claves de un objeto | Compara las mismas propiedades por su nombre y valor. | Cero diferencias si los valores siguen iguales. |
| Elementos de un array | Empareja cada índice anterior con el mismo índice nuevo. | Una inserción al inicio puede generar varios cambios y un alta. |
Campo ausente frente a campo con null |
Comprueba si la propiedad existe, además de su valor. | Un alta al añadirla; una baja al eliminarla. |
Puedes comprobar los pares siguientes en JSON Diff, usando la primera entrada como JSON anterior y la segunda como JSON nuevo. Los espacios dentro de una cadena sí forman parte de su valor: "A B" y "AB" son distintos.
Mismo valor, distinto texto: ¿por qué hay cero diferencias?
Antes:
{"a":1,"b":2}
Después:
{
"b": 2,
"a": 1
}
El resumen esperado es 0 altas, 0 bajas y 0 cambios: 0 diferencias en total. Ambas entradas tienen a con valor 1 y b con valor 2. Cambiar la presentación no cambia esos valores.
Un diff textual por líneas podría marcar el cambio de una línea a varias, los espacios y el orden de las claves. La comparación semántica evita ese ruido cuando quieres saber si cambiaron los datos. JSON Diff no ofrece una vista de diff textual.
La distinción entre objetos y arrays viene del formato: RFC 8259, sección 4 describe los objetos como colecciones sin orden; los arrays son secuencias ordenadas según la sección 5. El emparejamiento por índice es la regla concreta de este comparador.
Insertar al inicio de un array: ¿por qué aparecen tres diferencias?
Antes:
{"items":["A","B"]}
Después:
{"items":["X","A","B"]}
La versión actual compara posiciones, empezando por el índice 0:
| Ruta | Tipo | Antes → después |
|---|---|---|
$.items[0] |
Cambio | "A" → "X" |
$.items[1] |
Cambio | "B" → "A" |
$.items[2] |
Alta | Ausente → "B" |
El resumen esperado es 1 alta, 0 bajas y 2 cambios: 3 diferencias en total. El alta corresponde a "B" en el índice nuevo [2], aunque tú hayas añadido "X" al principio.
El algoritmo no infiere «se insertó X y se desplazaron los demás». Tampoco detecta movimientos ni empareja elementos por un campo id. Lee cada fila como una diferencia entre valores en esa posición, no como un historial de las ediciones realizadas.
Propiedad ausente, null y “null”: ¿cuál es la diferencia?
Compara esta entrada anterior:
{}
con esta entrada nueva:
{"nota":null}
El resumen es 1 alta, 0 bajas y 0 cambios: 1 diferencia en total:
| Ruta | Tipo | Antes → después |
|---|---|---|
$.nota |
Alta | Ausente → null |
En {} no existe la propiedad nota. En la segunda entrada existe y su valor es null. Si inviertes las entradas, obtienes una baja en la misma ruta.
Ahora compara antes:
{"nota":null}
con después:
{"nota":"null"}
El resumen es 0 altas, 0 bajas y 1 cambio: 1 diferencia en total:
| Ruta | Tipo | Antes → después |
|---|---|---|
$.nota |
Cambio | null → "null" |
La propiedad existe en ambos objetos, pero pasa del valor JSON null a una cadena de cuatro letras. Todos estos fragmentos son JSON válido: la validez sintáctica y la igualdad de valores responden preguntas diferentes.
Qué significa un diff vacío y qué queda fuera
Un resultado completo con cero diferencias indica que los valores representados se compararon iguales bajo estas reglas. No prueba que el texto original sea idéntico ni que una aplicación se comporte igual. Si necesitas decidir qué cambios son esperados o cuáles requieren investigar una regresión, consulta la guía para comparar respuestas JSON de una API.
Números y límites: el comparador usa números de JavaScript; cifras muy grandes o con mucha precisión pueden perderla durante el análisis. La herramienta muestra un aviso cuando detecta ese riesgo y no ofrece precisión numérica arbitraria. Requiere JSON estricto y rechaza claves duplicadas. Cada entrada admite hasta 1.000.000 unidades UTF-16 y 200 niveles de anidación; la comparación admite hasta 1.000 registros de cambio y tiene un presupuesto de trabajo. Si se alcanza un límite, reduce la muestra: una operación fallida no demuestra igualdad. La página de JSON Diff detalla los límites vigentes.