JSON Diff / Compare

Paste two JSON documents and see exactly what changed — keys are matched regardless of order, and nested values are compared right down to the leaf.

🔒 100% private — nothing is uploaded

Paste JSON into both boxes above to compare them.

How it works

This is a semantic diff, not a text diff. Both sides are parsed into real JSON, then compared structurally so only meaningful differences show up.

1

Paste both versions

Drop the original into A and the updated version into B. Each side is parsed and validated on its own.

2

Compared structurally

Objects are matched key by key regardless of order; arrays are matched index by index. The walk is recursive to any depth.

3

Read the diff

Every leaf is labelled added, removed, changed or unchanged, each with its full dotted path.

About semantic JSON comparison

A traditional line-based diff treats JSON as plain text, so re-indenting a file or listing an object's keys in a different order lights up as dozens of false changes. That noise makes it hard to spot the one value that actually moved.

A semantic diff sidesteps that by comparing the parsed data instead of the text. Objects are unordered maps, so { a: 1, b: 2 } equals { b: 2, a: 1 }. Arrays are ordered, so they're compared position by position. The comparison is also type-aware — the number 5 and the string "5" are reported as a change, not a match.

The result is a precise list of what was added, removed or changed, each pinned to a dotted path like user.roles[0] so you can jump straight to it in your source.

🔒

Private by design. Both documents are parsed and compared entirely in your browser with plain JavaScript. Your JSON never leaves your device and is never uploaded — we never see it.

Frequently Asked Questions

How is this different from a plain text diff?
A text diff compares character by character, so reordering keys or reformatting whitespace shows up as changes. This tool parses both sides into real JSON and compares them structurally, so only genuine differences in keys and values are reported.
Does the order of keys matter?
No. Objects are compared key by key regardless of order, so { a: 1, b: 2 } and { b: 2, a: 1 } are treated as identical. Arrays, however, are compared index by index, so element order does matter for lists.
What do added, removed and changed mean?
Added is a key or element present in B but not A. Removed is present in A but not B. Changed is a leaf that exists on both sides but holds a different value or type.
How are nested objects and arrays handled?
The comparison is fully recursive. It walks into nested objects and arrays to any depth, so a difference deep inside a structure is pinpointed with its full dotted path, like user.address.city or items[2].price.
Can it tell a number from a string?
Yes. The diff is type-aware, so the number 5 and the string "5" are reported as changed. It also distinguishes null, booleans, objects and arrays from one another.
Is my JSON uploaded anywhere?
No. Both documents are parsed and compared entirely in your browser on your own device. Your JSON is never uploaded, and we never see it.