Structural JSON Diff
Compare two JSON values structurally (not as text). The tree walk reports each difference by full JSON path and classifies it as added, removed, changed or type-changed. Key order is ignored. Everything runs in your browser.
Usage
Compares two JSON values structurally (recursive walk), not as text. Key order is ignored.
Four diff types
- + Added: key/element present only on the right;
- − Removed: present only on the left;
- ~ Changed: same path, different primitive value;
- ! Type-changed: same path, different type (e.g.
"85"vs85).
If both sides are API responses that encode their payload as an escaped string (e.g. {"OUTPUT":"{\"msgType\":\"S\",...}"}), a plain diff reports a single "strings differ" at $.OUTPUT and tells you nothing about which field changed. Tick Expand nested JSON to unwrap those fields before comparing, so differences resolve to exact paths.
Each diff is labelled with its full JSON path (e.g. $.user.phone, $.tags[2]). Click any colored badge to filter that diff type. Everything runs locally; JSON is never uploaded.
Use cases
FAQ
How does this differ from git diff?
git diff compares text lines; this tool compares JSON semantically. Reordered keys aren't reported as differences.
How are arrays compared?
By index. Elements that moved are flagged as changed; sort both sides first if you want order-insensitive comparison.
What's the difference between Changed and Type-changed?
Type-changed (e.g. "85" vs 85) is marked !; same-type with different values is marked ~.
Can I copy a diff path?
Yes — every diff has a full JSON path like $.user.phone you can paste straight into your code.