Compara dos documentos JSON por su estructura, sin importar el orden de las claves, y consulta las rutas agregadas, eliminadas y modificadas en una lista.
¿Qué es JSON Diff?
JSON Diff es una herramienta en línea gratuita que compara dos documentos JSON por su estructura, en tu navegador, y enumera cada valor agregado, eliminado o modificado, cada uno con su ruta. El orden de las claves no importa, y 1, 1.0 y 1e0 cuentan como el mismo número.
Úsala para ver qué cambió entre dos respuestas de una API, dos archivos de configuración o dos versiones de los mismos datos, sin el ruido de un reformateo.
Qué admite
- Dos documentos JSON de cualquier tipo: un objeto, una lista, un texto, un número, true, false o null puede ser el nivel superior.
- Los objetos se comparan por clave, así que se ignora el orden de las claves, y la lista de diferencias se ordena por clave.
- Las listas se comparan por posición: el elemento 0 con el elemento 0, el elemento 1 con el elemento 1 y así sucesivamente. Un elemento que existe en una sola de las listas se informa como agregado o eliminado en su posición.
- Los números se comparan por su valor decimal exacto, sin redondeo: 1, 1.0 y 1e0 son iguales, -0 es igual a 0, y 9007199254740993 es distinto de 9007199254740992. Los textos se comparan por su valor, así que "\u0041" y "A" son iguales.
- Cada diferencia es una línea: + ruta: valor para un valor agregado, - ruta: valor para uno eliminado y ~ ruta: antes -> después para uno modificado. Un valor que es un objeto o una lista se escribe de forma compacta, en la misma línea.
- Las rutas son JSON Pointers (RFC 6901) después de un #: #/a/b es el miembro b de a, #/tags/1 es el elemento 1 de tags, y # solo es el documento entero. Una / en una clave se escribe ~1 y una ~ se escribe ~0.
- Un valor cuyo tipo cambió, como un número que pasa a ser texto, o un objeto que pasa a ser una lista, es un único cambio en su ruta. La herramienta no mira dentro de él.
Conviene saber
- El orden de las listas importa. Dos listas con los mismos elementos en otro orden se informan como cambios en cada posición que difiere. No existe «movido» ni correspondencia de elementos por un id.
- Un nombre repetido dentro de un objeto, o una cadena con un escape subrogado sin pareja, se rechaza en cualquiera de las entradas, en lugar de dejar que un valor prevalezca.
- La comparación es de datos, no de texto: los espacios, la sangría y los escapes como \u0041 no son diferencias. Cuando los necesites, usa una herramienta de diff de texto.
- Los valores se muestran tal como están escritos en la fuente, así que 1.50 aparece como 1.50 en la lista aunque sea igual a 1.5.
- Una lista de diferencias que superaría el límite de tamaño se rechaza con una vista previa incompleta (mira abajo).
¿Cómo se usa JSON Diff?
- Pega o escribe el primer documento JSON en «Original» y el segundo en «Modificado». No se ejecuta nada mientras escribes.
- Pulsa «Comparar».
- Lee el resultado junto a las entradas: dice cuántas diferencias se encontraron y después enumera una línea por diferencia, con la ruta en la que ocurre. Si los dos documentos no tienen diferencias, el resultado lo indica. Si no se puede usar una de las entradas, el mensaje dice cuál es e indica la línea y la columna.
- Pulsa «Copiar» para poner la lista en el portapapeles, o «Descargar» para guardarla como differences.txt.
Ejemplos
Agregado, eliminado y modificado
Pon el primer documento en «Original», el segundo en «Modificado» y pulsa «Comparar». Cada línea empieza con un signo: - para un valor que solo tiene el original, + para un valor que solo tiene el documento modificado y ~ para un valor que está en ambos con contenido distinto. Las claves del segundo documento están en otro orden, lo que no importa, y la lista se ordena por clave. #/tags/1 es el elemento en la posición 1 de tags, contando desde 0.
{
"name": "Ada",
"age": 36,
"tags": [
"math"
],
"city": "London"
}{
"city": "London",
"name": "Ada Lovelace",
"tags": [
"math",
"poetry"
],
"email": "ada@example.com"
}- #/age: 36
+ #/email: "ada@example.com"
~ #/name: "Ada" -> "Ada Lovelace"
+ #/tags/1: "poetry"Un error de sintaxis en una de las entradas
El documento de «Modificado» tiene una coma antes de la llave de cierre, algo que JSON no admite. La herramienta se niega, dice qué entrada está mal e indica la línea y la columna. No se compara nada hasta que los dos documentos sean válidos.
{"a": 1}{"a": 1,}JSON no admite una coma antes de una llave o un corchete de cierre (coma final).
Línea 1, columna 9
Los mismos datos, escritos de otra forma
Las claves están en otro orden, y 10 está escrito como 1e1 y 2 como 2.0. Los números se comparan por su valor exacto y el orden de las claves no cuenta, así que la herramienta indica que no hay diferencias.
{"price": 10, "qty": 2}{"qty": 2.0, "price": 1e1}Los dos documentos JSON son idénticos.
Las listas se comparan por posición
Las dos listas tienen los mismos elementos en otro orden. Los elementos se comparan posición por posición, así que la herramienta indica dos cambios, en #/0 y #/1, y no un movimiento.
["a", "b"]["b", "a"]~ #/0: "a" -> "b"
~ #/1: "b" -> "a"Claves con barra
Una clave que contiene / se escribe con ~1 en la ruta, y ~ con ~0, como exige la RFC 6901, para que una ruta nunca sea ambigua. Aquí la clave es a/b.
{"a/b": 1}{"a/b": 2}~ #/a~1b: 1 -> 2Límites y privacidad
Límites de tamaño
- Entrada: cada cuadro admite hasta 2.000.000 bytes de texto en UTF-8 (unos 2 MB), contados por separado. Las letras acentuadas y los emojis ocupan más de un byte cada uno. Una entrada mayor se rechaza.
- Resultado: también hasta 2.000.000 bytes. Si el resultado completo fuera mayor, la herramienta muestra solo una vista previa incompleta de los primeros 100.000 bytes, y esa vista previa no se puede copiar ni descargar.
- Anidamiento: hasta 256 niveles de objetos y listas dentro de otros. Un JSON más profundo se rechaza porque supera lo que procesa la herramienta.
- Tiempo: una ejecución que tarda más que su límite de tiempo se detiene. Prueba con una entrada más pequeña.
¿Se envía mi texto a un servidor?
No. El texto que escribes o pegas, o abres desde un archivo local, se procesa localmente en tu navegador, en un Web Worker dedicado. Nunca se sube ni se envía al servidor (un archivo que abres se lee solo en tu navegador), y no se escribe en el almacenamiento, en cookies ni en la barra de direcciones.
«Copiar» pone el resultado en el portapapeles y «Descargar» lo guarda como archivo, pero solo cuando pulsas el botón. El archivo se crea en tu navegador, así que no se sube nada.
Para conocer todos los detalles, consulta la Política de privacidad
Herramientas y páginas relacionadas
Tu texto se queda en la página cuando cambias de herramienta en la misma pestaña, así que puedes probar el mismo texto en otra. Recargar o cerrar la pestaña lo termina.