Compare Two JSON Documents
See what really changed between two JSON documents. Key order and formatting are ignored; each difference comes with its exact path.
Original JSON
Changed JSON
Paste JSON on both sides to compare.
How to use it
- 1Paste the original JSON on the left and the changed JSON on the right (or open files).
- 2Tick "Ignore array order" if [1, 2] and [2, 1] should count as equal.
- 3Read the list of differences: added, removed and changed values, each with its path.
Private by design
Everything runs in this browser tab. Your input is never uploaded, logged or saved on a server, and there are no public "recent" pages. Close the tab and it's gone.
How we keep it privateExamples
Key order and number formatting (1 vs 1.0) do not matter in JSON.
Input
Left: {"a": 1, "b": 2}
Right: {"b": 2, "a": 1.0}Output
No differences
Input
Left: {"limits": {"rps": 100}, "owners": ["ana"]}
Right: {"limits": {"rps": 250}, "owners": ["ana", "li"]}Output
changed $.limits.rps 100 → 250 added $.owners[1] "li"
Why a text diff is the wrong tool for JSON
Two API responses can be identical in meaning and still look completely different: keys come back in another order, a serializer writes 1.0 instead of 1, indentation changes. A line-by-line diff flags all of that as changes and hides the one field that actually moved.
This compare parses both sides and walks the trees. Objects are matched by key, numbers by value, and the result is a short list you can act on: the path, the old value and the new value.
Reading the paths
Paths use JSONPath notation, the same you would use in jq, Postman tests or JSONPath libraries:
| Path | Means |
|---|---|
| $ | The whole document |
| $.user.email | Key "email" inside key "user" |
| $.items[2] | Third item of the "items" array |
| $["first name"] | A key with a space or special character |
Frequently asked questions
Does it ignore the order of keys?
Yes, always. JSON objects are unordered, so {"a":1,"b":2} equals {"b":2,"a":1}.
Can it ignore the order of array items?
Yes, tick "Ignore array order". Items are then matched by value, so [1, 2, 3] equals [3, 1, 2], and only items without a match are reported as added or removed.
Is 1 the same as 1.0?
Yes. Numbers are compared by value, so 1, 1.0 and 1e0 are equal. Very large integers are compared digit by digit, so no precision is lost.
Are my files uploaded?
No. Both documents are parsed and compared in your browser, in a background thread. Nothing is sent or stored.