JSON Diff: comparar dos documentos JSON
Compara dos documentos JSON por estructura, no por líneas. Todo se ejecuta localmente: no se sube nada.
- Entrada
- Two JSON documents
- Salida
- Path-level changes · JSON Patch
Original
válido
Modificado
válido
Diferencias
6 cambios
- Modificado/version
− 1
+ 2
- Añadido/settings/language
+ "en"
- Añadido/users/0
+ {"id":3,"name":"Grace","email":"grace@example.com"}
- Modificado/users/1/email
− "ada@example.com"
+ "ada@example.org"
- Eliminado/users/1
− {"id":2,"name":"Linus","email":"linus@example.com"}
- Tipo cambiado/limitcadena → número
− "100"
+ 100
Comparar JSON por su significado, no por su texto
Esta herramienta JSON diff compara dos documentos JSON como datos. Los objetos se emparejan clave a clave sea cual sea el orden de las claves, el formato y la sangría se ignoran, y cada diferencia se muestra con su ruta exacta, el tipo de cambio y los valores antiguo y nuevo. Los arrays de registros pueden emparejarse por un campo id para que una lista reordenada o una fila insertada al principio no aparezca como si todo hubiera cambiado. Exporta el resultado como JSON Patch RFC 6902 o como informe de texto plano. Ambos documentos se quedan en tu navegador; no se sube nada.
Cómo comparar dos archivos JSON
- Pega el JSON original a la izquierda y el nuevo a la derecha, o suelta un archivo
.jsonen cada lado. - Corrige cualquier error de análisis que aparezca sobre un panel; indica la línea y la columna.
- Lee la lista de cambios, cada uno con su ruta JSON Pointer como
/users/2/email, o cambia a la vista de árbol para verlos en contexto. - Activa Emparejar elementos de array por clave e introduce el campo que identifica un registro, normalmente
id. - Filtra por añadido, eliminado, modificado o tipo cambiado, y copia el JSON Patch o descarga un informe de texto.
Por qué un diff de texto no sirve para JSON
Dos documentos JSON pueden ser idénticos como datos y totalmente distintos como texto. Una API devuelve las claves en otro orden, un archivo está minificado y el otro formateado, uno escribe 1.0 donde el otro escribe 1. Un comparador de textos por líneas marca todo eso. Un diff estructural analiza primero ambos lados y compara los valores, así que solo informa de cambios reales: una clave añadida o eliminada, un valor que cambió o un valor cuyo tipo cambió, como la cadena "42" convertida en el número 42.
Los números se comparan por valor con precisión completa, así que 1.50 es igual a 1.5, mientras que dos ID de 20 cifras que difieren en la última se siguen marcando como distintos, algo que una comparación mediante números de JavaScript pasaría por alto.
- Añadido
- La clave o el elemento del array solo existe en el documento nuevo.
- Eliminado
- La clave o el elemento del array solo existe en el documento original.
- Modificado
- Mismo lugar, mismo tipo, valor distinto.
- Tipo cambiado
- El valor pasó a ser de otro tipo JSON, por ejemplo un objeto se convirtió en array o un número en cadena.
Comparar arrays: por posición o por clave
Por defecto, los elementos de un array se comparan posición a posición: el elemento 0 con el 0, el 1 con el 1. Es lo correcto en listas donde el orden importa, como coordenadas o pasos. En listas de registros no lo es: inserta un usuario al principio y todos los que vienen después aparecen como modificados.
Con Emparejar elementos de array por clave, los elementos se emparejan por un campo identificador, id por defecto. Cada registro se compara con el que tiene el mismo id esté donde esté, así que el resultado dice que se añadió un usuario y cambió un correo. El emparejamiento solo se usa cuando todos los elementos de ambos lados son objetos con una cadena o un número único en ese campo; si no, el array se compara por posición.
La vista de árbol muestra ambos documentos fusionados en un solo esquema. Las ramas con cambios se abren automáticamente y las que no tienen cambios quedan plegadas, con las adiciones en verde, las eliminaciones en rojo y los valores modificados como antiguo → nuevo. Desactiva Solo cambios para ver las claves sin cambios a su alrededor como contexto.
Rutas, JSON Pointer y JSON Patch
Cada cambio se localiza con un JSON Pointer (RFC 6901): una ruta separada por barras desde la raíz, como /orders/0/total, donde los elementos de array se numeran desde cero y los caracteres ~ y / de una clave se escriben ~0 y ~1. Una ruta vacía significa el documento completo.
La exportación es un JSON Patch (RFC 6902): una lista de operaciones add, remove y replace que, aplicadas en orden, convierten el documento de la izquierda en el de la derecha. Bibliotecas como fast-json-patch, jsonpatch para Python y el soporte de patch de Kubernetes lo aplican directamente. Las eliminaciones en arrays se escriben desde el índice más alto hacia abajo para que el índice de cada operación siga siendo correcto al ejecutarse.
Para ordenar primero cualquiera de los documentos, formatéalo con el formateador JSON; para convertir el resultado a YAML o CSV, usa el convertidor de datos.
Preguntas frecuentes
- ¿Cómo comparo dos archivos JSON?
- Pega o suelta el JSON original a la izquierda y el nuevo a la derecha. Cada diferencia se muestra con su ruta, el tipo de cambio y los valores antiguo y nuevo.
- ¿Importa el orden de las claves al comparar JSON?
- No. Los objetos se comparan clave a clave, así que las mismas claves en otro orden son iguales. Los espacios y la sangría también se ignoran.
- ¿Cómo comparo arrays JSON cuando ha cambiado el orden?
- Activa Emparejar elementos de array por clave e introduce el campo que identifica cada elemento, como id. Los elementos se emparejan entonces por ese valor en lugar de por posición.
- ¿Qué es un JSON Patch?
- Un JSON Patch, definido en la RFC 6902, es un array JSON de operaciones como add, remove y replace, cada una con una ruta. Aplicarlo al documento original produce el nuevo.
- ¿Qué significa tipo cambiado?
- El valor en esa ruta pasó a ser de otro tipo JSON, por ejemplo un número se convirtió en cadena o un objeto en array. Suele indicar un error en lo que generó los datos.
- ¿Puedo comparar archivos JSON grandes?
- Sí. Archivos de varios megabytes se comparan en bastante menos de un segundo en un ordenador normal, porque el análisis y la comparación se ejecutan localmente en tu navegador.
- ¿Se sube mi JSON?
- No. Ambos documentos se analizan y comparan en tu navegador y nunca se envían a ningún sitio, así que es seguro comparar respuestas de API con datos personales o secretos.