JSON Diff

Deep-compare two JSON objects — see every added, removed and changed field

Left JSON

Right JSON

Added: 1 | Removed: 0 | Changed: 3 | Same: 2

~ activetruefalse
~ age2829
+ lastLogin"2025-01-01"
name"Alice"
role"admin"

About the JSON Diff Tool

This JSON diff tool compares two objects structurally rather than as text, so key order and formatting differences are ignored. Only genuine changes — added, removed or altered fields — are reported.

A JSON diff has to work structurally, because a text diff on JSON is nearly useless. Reordered keys, different indentation or a reformatted file make a text comparison show everything as changed when nothing meaningful has.

Comparing by structure means matching keys by name at each level and reporting only real differences: a field present in one and not the other, or the same field holding a different value. That is what you want when checking whether a config drifted between environments or whether an API response changed shape after a deploy.

Nested objects and arrays are walked to full depth, so a change buried six levels down is found. Everything runs in your browser, which matters when the objects are production responses containing real data.

How to use the JSON Diff Tool

  1. Paste the first object. Enter the original or expected JSON.
  2. Paste the second object. Enter the version you are comparing against.
  3. Read the differences. See which fields were added, removed or changed.
  4. Act on the result. Fix the drift or confirm the change was intended.

JSON Diff Tool features

  • Structural comparison, so key order is ignored
  • Added, removed, changed and unchanged fields classified
  • Every difference annotated with its full path
  • Counts of each change type
  • Filter to changed fields only
  • Nested objects and arrays walked to full depth
  • Runs in your browser; neither object is uploaded

Frequently asked questions

How is this different from a text diff on two JSON files?

A text diff compares characters, so reordered keys, different indentation or a reformatted file show as changes when nothing meaningful moved. This matches keys by name at each level and reports only genuine differences.

What does the path next to each change mean?

It is the location of the field in the object, written as a dotted path with array indexes, such as user.roles[2].name. That is what makes a difference buried six levels deep actionable rather than merely visible.

How deep does the comparison go?

All the way. Both objects are flattened to leaf paths before comparison, so nesting depth is not a limit and arrays are compared position by position.

What is this most useful for?

Checking whether a config drifted between environments, or whether an API response changed shape after a deploy. Both are cases where you need to know what differs, not that something differs.

What happens if one side is invalid JSON?

The panel with the problem is flagged and no comparison is attempted until both sides parse, so you are never shown a diff computed against a partially-read document.

Is my data uploaded?

No. Both objects stay in the browser tab, which is the point when the things being compared are production API responses containing real records.