JSON Tool

JSON Diff & Compare – Spot Differences Between Two JSON Files

Compare two JSON payloads side-by-side. Every added, removed, and changed value is reported with its full path — and key order is ignored by default.

Left JSON (Original)
Right JSON (New)
Differences

Paste two JSON snippets above and click Compare.

Order-Independent

Toggle "Ignore key order" so reordered keys aren't flagged — JSON treats objects as unordered.

Path-Based Output

Each difference shows its full path (e.g. address.zip). Dots and brackets in keys are escaped (a\.b) so paths stay unambiguous.

Browser-Only

Both payloads stay in your tab. Compare production responses safely.

Hand-picked tools that pair well with this one.

Why Compare JSON Structurally?

A plain text diff flags every reordered key, every reindented line, and every harmless whitespace change as a "difference" — drowning the real changes in noise. A structural JSON diff ignores formatting and reports only what actually changed: a value flipped, a key added, an array item dropped.

Path-Based Output

Each difference is labelled with a dot-notation path — user.address.zip or roles[1] — so you know exactly where to look. No more eyeballing two pretty-printed blobs trying to spot the one character that changed.

Key Features

Ignore Key Order JSON objects are unordered by spec — toggle this on so reordered keys aren't flagged as changes.
Color-Coded Results Green for added, red for removed, amber for changed — scan results at a glance.
Type-Aware Comparison A string "42" and a number 42 are flagged as a change — type mismatches matter.
100% Browser-Based Comparing production payloads with PII? Both sides stay in your tab. Nothing is uploaded.

Pro Tip

Diffing API responses across two environments? Strip volatile fields like timestamp or requestId before comparing — otherwise every diff will be flooded with noise from values that always change.

Walkthrough: API Regression Testing

You've changed the response shape of a REST endpoint and want to be sure the new payload is a strict superset of the old one. Paste the old response on the left, the new one on the right, and click Compare. Every + Added entry confirms a new field; any − Removed entry is a breaking change you need to migrate consumers off. ~ Changed entries show value drift — useful for catching unintentional defaults swaps.

Frequently Asked Questions

Are arrays compared by index or by value?

By index. [1,2,3] vs [3,2,1] reports two changes (positions 0 and 2). For order-insensitive list comparison, sort both arrays before pasting.

What counts as "ignore key order"?

When enabled, both inputs are deeply re-sorted by key before comparison, so {"a":1,"b":2} and {"b":2,"a":1} are reported as identical.

Will it find a missing key inside a nested object?

Yes. The diff recurses into every level of nesting and reports the missing key with its full path, e.g. user.address.zip.

Can I diff two minified blobs?

Yes — formatting is irrelevant since both inputs are parsed before comparing. Minified, pretty-printed, mixed — the diff is the same.