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- 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.