Todos los artículos

JSON Diff: en qué se diferencia la comparación estructural de la textual

Si se comparan dos documentos JSON con un diff de texto normal (como el que se usa para código), el resultado suele ser engañoso: los mismos datos pueden escribirse con distinto orden de claves, distinta sangría o distinta cantidad de espacios, y el diff de texto mostrará una «diferencia» donde los datos en realidad son idénticos.

Comparación estructural

Un JSON Diff estructural analiza ambos documentos como un árbol de valores y compara los datos en sí: si un campo existe, qué valor tiene, si el tipo coincide. El orden de las claves de un objeto, los espacios de más o el estilo de sangrado no se tienen en cuenta, porque no forman parte de los datos.

Qué muestra el diff

Un resultado típico de comparación estructural destaca tres tipos de cambios: campos añadidos en el segundo documento, campos eliminados del primero, y campos presentes en ambos pero con valores distintos. Con los arrays la comparación es más compleja: hay que decidir si comparar los elementos por posición o intentar emparejar objetos similares.

Para qué sirve

  • Comparar la respuesta de una API antes y después de un cambio en el backend para ver las diferencias reales en los datos.
  • Comprobar que un cambio en un archivo de configuración no ha tocado nada más de lo previsto.
  • Detectar una regresión en pruebas donde el JSON esperado y el real difieren.

Diferenciar archivos de traducción entre variantes del español

El español tiene una fragmentación de locales inusualmente grande para el desarrollo de software: es_ES, es_MX, es_AR, es_CO y más, cada una con archivos JSON de traducción propios en ecosistemas como Vue I18n, que además tiene una comunidad hispanohablante particularmente numerosa desde sus primeros años. Comparar el archivo es_MX.json contra es_ES.json con un diff estructural es la forma habitual de detectar claves de traducción que faltan en una variante regional sin tener que leer archivo por archivo a mano.

Comparar arrays: por posición o por clave

El enfoque más simple es comparar los elementos de un array índice a índice, pero si se inserta un elemento nuevo en medio del array, todas las posiciones siguientes se «desplazan» y el diff mostrará un cambio en cada elemento posterior al punto de inserción, aunque en realidad solo cambió uno. Las herramientas más inteligentes intentan emparejar los elementos por un campo único (como id) para mostrar exactamente la inserción o eliminación, en lugar de una cascada de cambios falsos.

Probar la herramienta