Diff JSON — Comparar objetos JSON

Compara dos objetos o arrays JSON por ruta con comprobación estricta de tipos. No es un diff de texto por líneas.

Cómo funciona
  • + ruta añadida · − eliminada · ~ valor cambiado. Objetos: puntos (user.name); arrays: índices (items[0]). Comparación estricta (1 ≠ "1").

+ ruta añadida · − eliminada · ~ valor cambiado. Objetos: puntos (user.name); arrays: índices (items[0]). Comparación estricta (1 ≠ "1").

Sobre el diff JSON

¿Qué es un diff JSON?

Un diff JSON compara dos valores JSON y lista cambios estructurales por ruta. Esta página informa rutas añadidas (+), eliminadas (−) y valores cambiados (~).

El trabajo ocurre en el navegador. Las rutas de objeto usan puntos (user.name); los arrays usan índices (items[0]). La comparación es estricta: 1 no es "1". No es un diff de texto por líneas ni una CLI de un lenguaje concreto.

Comparar JSON en código

JavaScript
const a = JSON.parse(left);
const b = JSON.parse(right);
function diff(x, y, path = "") {
  if (Object.is(x, y)) return [];
  if (typeof x !== "object" || !x || typeof y !== "object" || !y) return [{ path, from: x, to: y }];
  const keys = Array.from(new Set([...Object.keys(x), ...Object.keys(y)]));
  return keys.flatMap(k => diff(x[k], y[k], path ? `${path}.${k}` : k));
}
const changes = diff(a, b);
Python
import json
a = json.loads(left)
b = json.loads(right)
def diff(x, y, path=""):
    if x == y: return []
    if not isinstance(x, (dict, list)) or not isinstance(y, (dict, list)):
        return [{"path": path, "from": x, "to": y}]
    keys = set(x.keys()) | set(y.keys()) if isinstance(x, dict) else range(max(len(x), len(y)))
    res = []
    for k in keys:
        p = f"{path}.{k}" if path else str(k)
        if k not in x: res.append({"path": p, "added": y[k]})
        elif k not in y: res.append({"path": p, "removed": x[k]})
        else: res.extend(diff(x[k], y[k], p))
    return res
changes = diff(a, b)
Notación
+ user.email = "a@b.c"
- items[1] = 2
~ b 2 -> 3

Preguntas sobre el diff JSON

¿Qué es un diff JSON?
Un diff JSON compara dos valores JSON y lista cambios estructurales por ruta. Esta página usa + para rutas añadidas, − para eliminadas y ~ para valores cambiados.
¿Cómo se escriben las rutas JSON?
Las claves de objeto usan puntos, como user.name. Los índices de array usan corchetes, como items[0]. La ruta raíz se muestra como (root) cuando cambia el valor de nivel superior.
¿La comparación JSON es estricta de tipo?
Sí. Los valores deben coincidir en tipo y contenido. El número 1 difiere de la cadena "1", y el orden de las claves del objeto no importa.
¿Cómo comparar JSON en código?
Analiza ambos lados con JSON.parse en JavaScript o json.loads en Python, luego recorre objetos y arrays para informar altas, bajas y cambios de ruta. Esta página es una herramienta del navegador, no un paquete CLI.