JSON Diff
Compare two JSON documents structurally and see exactly what was added, removed, or changed — not a raw text diff.
Use the tool ↓Your data is processed locally in your browser and is not uploaded to our servers.
About this tool
A plain text diff — the kind that compares two files line by line — treats JSON the same way it treats any other text, which means it's easily fooled by JSON's own flexibility: reordering an object's keys, changing indentation, or reformatting from one line to many all produce a wall of text-diff noise even when the underlying data hasn't meaningfully changed at all. Two JSON documents that represent identical data can look completely different as raw text, and two that differ by one real value can produce a diff cluttered with false positives from formatting alone.
This tool compares the parsed structure instead of the raw text. Both inputs are parsed into their actual data, then walked recursively — key by key for objects, index by index for arrays — comparing values at each corresponding path. The result is a diff that reflects what actually changed in the data: a property that exists in B but not A is added; one that exists in A but not B is removed; a value present in both but different is changed, shown with both the old and new value; everything else is unchanged, and hidden by default to keep the results focused on what's different.
Because comparison follows the data's actual shape, nested objects and arrays are handled the way you'd expect — a change three levels deep inside a nested object is reported at its exact path (like user.address.city), not just flagged as "something changed somewhere." Array comparison is position-based: item 0 in A is compared against item 0 in B, and so on, which is the right behavior for most real-world JSON (ordered lists, sequential records) though it means an array with items inserted in the middle will show every subsequent item as "changed" rather than recognizing an insertion — a known tradeoff of position-based array comparison versus a more complex reordering-aware algorithm.
Both inputs are parsed with your browser's native JSON parser before comparison, so whitespace, key order, and formatting differences between A and B never affect the result — only the actual data does. Nothing you paste is sent anywhere; the entire comparison runs locally.
How to use it
Paste JSON A and JSON B
A is treated as the "before" version, B as "after."
Click Compare
Both inputs are parsed and walked structurally, not compared as raw text.
Review added, removed, and changed
Each difference shows its exact path and, for changes, both the old and new value.
Show unchanged if needed
Toggle unchanged values on to see the full picture alongside the differences.
Example
{
"name": "John",
"age": 30
}{
"name": "John",
"age": 31,
"city": "Delhi"
}Result: age changed from 30 to 31, and city was added.
Common use cases
Comparing API responses
See exactly what changed between two versions of an endpoint's response.
Reviewing config changes
Compare a config file before and after an edit without formatting noise.
Debugging state changes
Compare application state snapshots to find exactly what a bug altered.
Auditing data migrations
Confirm a migration script only changed the fields it was supposed to.
Reviewing test fixtures
Check what changed between an expected and actual test output.
Comparing environment configs
Spot differences between staging and production configuration.