Diff JSON — porównaj obiekty JSON

Porównaj dwa obiekty lub tablice JSON ścieżkami ze ścisłym sprawdzaniem typów. To nie jest diff tekstowy wierszami.

Jak to działa
  • + dodana ścieżka · − usunięta · ~ zmieniona wartość. Obiekty: kropki (user.name); tablice: indeksy (items[0]). Porównanie ścisłe (1 ≠ "1").

+ dodana ścieżka · − usunięta · ~ zmieniona wartość. Obiekty: kropki (user.name); tablice: indeksy (items[0]). Porównanie ścisłe (1 ≠ "1").

O diffie JSON

Czym jest diff JSON?

Diff JSON porównuje dwie wartości JSON i wypisuje zmiany strukturalne według ścieżki. Ta strona zgłasza dodane ścieżki (+), usunięte (−) i zmienione wartości (~).

Praca dzieje się w przeglądarce. Ścieżki obiektów używają kropek (user.name); tablice indeksów (items[0]). Porównanie jest ścisłe: 1 to nie "1". To nie jest diff tekstowy wierszami ani CLI dla konkretnego języka.

Porównaj JSON w kodzie

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)
Notacja
+ user.email = "a@b.c"
- items[1] = 2
~ b 2 -> 3

FAQ: diff JSON

Czym jest diff JSON?
Diff JSON porównuje dwie wartości JSON i wypisuje zmiany strukturalne według ścieżki. Ta strona używa + dla dodanych ścieżek, − dla usuniętych i ~ dla zmienionych wartości.
Jak zapisuje się ścieżki JSON?
Klucze obiektów używają kropek, np. user.name. Indeksy tablic używają nawiasów, np. items[0]. Ścieżka główna to (root), gdy zmienia się sama wartość najwyższego poziomu.
Czy porównanie JSON jest ścisłe typowo?
Tak. Wartości muszą zgadzać się typem i treścią. Liczba 1 różni się od napisu "1", a kolejność kluczy obiektu nie ma znaczenia.
Jak porównać JSON w kodzie?
Sparsuj obie strony przez JSON.parse w JavaScript lub json.loads w Pythonie, potem przejdź obiekty i tablice, zgłaszając dodania, usunięcia i zmiany ścieżek. Ta strona to narzędzie przeglądarkowe, nie pakiet CLI.