What is this JSON compare tool?
A semantic diff for JSON: it parses both documents and compares structure, so key order and formatting never register as changes. Only real differences do. Two features most online diffs lack: ignore keys (exclude noisy fields likeupdatedAt everywhere) and array identity matching (match array items by a key such as id, so reorders aren't false positives). View results side-by-side with colored JSON or as a collapsible tree diff, entirely in your browser, with nothing uploaded.
How to use
- Paste JSON into JSON A and JSON B (or load files / samples).
- Optionally add Ignore keys (e.g.
updatedAt) and set Match array items by (e.g.id). - Press Compare. The side-by-side view opens at the first difference: green added, red removed, amber changed.
- Switch to Tree diff for a collapsible structural view with change counts.
- Use Copy share link to share the diff. The data lives in the URL fragment, never sent to a server.
Examples
Key order never shows as a change
A: {"name":"Ada","id":1}
B: {"id":1,"name":"Ada"}✓ Identical (semantic compare: key order is ignored)
Ignore noisy keys (updatedAt)
Ignore keys: updatedAt
A: {"id":1,"updatedAt":"2026-07-03"}
B: {"id":1,"updatedAt":"2026-07-04"}✓ Identical (updatedAt excluded everywhere in the document)
Match array items by id: reorder ≠ change
Match by: id
A: [{"id":1,"n":"a"},{"id":2,"n":"b"}]
B: [{"id":2,"n":"b"},{"id":1,"n":"a"}]✓ Identical (items matched by "id", not by position)
A real change is pinpointed
A: {"user":{"active":true}}
B: {"user":{"active":false}}~1 changed user.active: true → false
Edge cases & gotchas
- Key order is irrelevant in JSON: a text diff shows reordered keys as changes; a semantic diff doesn't.
- Without identity matching, inserting one item at the top of an array makes every following item look changed. Set an id key to avoid this.
- Ignored keys apply at every depth, including inside array items.
1vs1.0and"1"vs1are different values. Types matter.- Multi-megabyte documents diff in a background Web Worker, so the page stays responsive.
FAQ
What is a semantic JSON diff?
It compares parsed structure, not text, so key order, whitespace, and formatting never show as changes. Only real differences in values, keys, and array items are reported.
How do I ignore keys like updatedAt or requestId?
Add them to the Ignore keys list before comparing. Ignored keys are excluded everywhere in the document. Perfect for timestamps, IDs, and other noise.
How do I compare JSON arrays by id?
Set “Match array items by” to a key (e.g. id). Items are matched by that key instead of position, so reordered arrays show no changes and an inserted item shows as one insert, not a cascade of shifted diffs.
Is my JSON uploaded when I compare or share?
Never. Diffing runs in your browser, and share links pack the data into the URL #fragment, which browsers do not send to any server.
What do the colors mean?
Green = added, red = removed, amber = changed. The side-by-side view auto-scrolls to the first difference.