JSON diff
Pega dos documentos JSON: las rutas modificadas aparecen al instante, sin botones y sin subir nada.
Diferencias0rutas añadidas0valores modificados0rutas eliminadas
Cómo se usa
- Pega el JSON antiguo en «JSON original» y el nuevo en «JSON modificado»: cada ruta añadida, eliminada o modificada aparece mientras escribes, sin ningún botón que pulsar.
- El orden de las claves, 1 frente a 1.0, 1e0 frente a 1 y \u00e9 frente a é no son diferencias: la comparación es estructural. Si necesitas revisar cambios de formato u orden de claves, usa la herramienta de diff de texto.
- Usa «Copiar diff» para llevarte la lista completa: cada línea lleva +, - o ~ seguido de la ruta y el valor completo, lista para una incidencia o un correo.
Ejemplo
Dos documentos
«Original»
{"pedido":"A-2026-001","cliente":{"nombre":"Ana","ciudad":"Madrid"},"total":1299.5,"pagado":false}
«Modificado»
{"pedido":"A-2026-001","cliente":{"nombre":"Ana","ciudad":"París"},"total":1399.0,"pagado":true,"cupon":"BIENVENIDA10"}Diferencias
+ $.cupon "BIENVENIDA10" ~ $.cliente.ciudad "Madrid" → "París" ~ $.total 1299.5 → 1399.0 ~ $.pagado false → true (+1 ~3 −0)
Las líneas «Original»/«Modificado» son encabezados del ejemplo; en el uso real cada documento va en su caja. Solo se listan los cambios reales de valor: el número de pedido y el nombre del cliente, que no cambian, no aparecen, y el orden de las claves nunca es una diferencia.
Reglas, límites y problemas conocidos
- Es un diff estructural, no de texto: se ignora el orden de las claves de objeto; 1, 1.0 y 1e0 son el mismo número; "\u00e9" y "é" son la misma cadena. Usa el diff de texto si te importan los cambios de formato.
- Los números se comparan como decimales exactos, nunca mediante Number de JavaScript: 9007199254740993 sigue siendo exacto y 1e400 no se convierte en Infinity. La lista sigue mostrando el número tal como lo escribiste.
- Las cadenas se comparan por su valor decodificado y se muestran en forma JSON estándar; las claves duplicadas conservan el último valor, como hace JSON.parse, y un aviso indica cuántos duplicados se han encontrado.
- Los arrays están ordenados: las inserciones y eliminaciones se alinean, así que añadir un elemento al principio es una línea «+», no un cambio en todos los siguientes. Los movimientos se notifican como una eliminación más una adición, y no hay opción de «ignorar el orden del array».
- Añadir o quitar un subárbol completo es una sola ruta. Los valores muy largos se muestran en pantalla como «objeto · N claves» o «array · N elementos», mientras que «Copiar diff» siempre contiene el valor completo.
- «Copiar diff» genera una lista de cambios en texto plano (+ / - / ~, ruta y valor completo), no un JSON Patch. Las inserciones y eliminaciones en arrays desplazan los índices posteriores, así que un JSON Patch ingenuo no se podría aplicar.
- Las rutas usan la forma $.a.b[0]. Los elementos eliminados apuntan a su índice antiguo; los añadidos y modificados apuntan al documento nuevo.
- Límites: el resultado se actualiza unos 0,6 s después de que dejes de escribir si entre los dos documentos suman más de 200.000 caracteres; un documento de más de 1.000.000 de caracteres o un anidamiento de más de 256 niveles se notifica como error, nunca se trunca. Los arrays que superan el límite de alineación se comparan por índice y así se indica; se muestran como máximo 400 líneas de cambio, pero al copiar siempre se obtiene la lista completa.
- Sin subida de archivos, sin carga desde URL, sin consultas JSON Schema o JSONPath, sin historial y sin enlaces para compartir. Todo funciona en tu navegador: no se sube ni se guarda nada.
- En páginas en chino, japonés y coreano, «Puntuación de ancho completo» está activada por defecto: la puntuación fuera de las cadenas se convierte a ASCII, mientras que el contenido de las cadenas se deja exactamente como se escribió.
Herramientas de desarrollo relacionadas
Lo que suele hacer falta después, una vez comparados los dos documentos.