JSON Pretty-Diff compares two JSON documents and shows you, at a glance, exactly what is different between them. Paste an original document on the left and a changed document on the right, and the tool produces a colour-coded structural diff: keys that were added appear in green, keys that were removed appear in red, and values that changed appear in amber, all laid out as an indented tree of the merged structure. It is built for anyone who works with JSON every day — comparing two API responses, reviewing a config change, checking what a migration script altered, or confirming that two package.json files really do differ only where you expect.
Unlike a plain text comparison, this tool understands the shape of your data. It parses both sides into real JSON values and walks them key by key and index by index, so it can tell the difference between a value that genuinely changed and one that simply moved because the file was re-formatted. Turn on Sort keys and two objects that hold the same data in a different key order are reported as identical — exactly what you want when one document came from a pretty-printer and the other from a minifier.
How it works
The tool parses each pane independently. If either side is not valid JSON, the error is shown inline next to that pane and the diff pauses until you fix it — no silent failures. Once both sides parse, each document is canonicalised: optionally key-sorted and normalised so formatting noise never shows up as a difference.
The structural engine then performs a deep, recursive comparison. For objects it takes the union of keys from both sides; for arrays it aligns elements by index. Every leaf is classified as added, removed, changed or unchanged, and every container that holds a change is marked so you can quickly find nested edits. A running summary counts how many keys were added, removed and changed.
If you prefer a patch-style view, switch to Text diff to see a classic line-by-line comparison of the formatted JSON, powered by a proper diff algorithm with added and removed lines highlighted. When you are done, Export report downloads a plain-text list of every change keyed by path.
Example
Suppose the left document is a package.json at version 1.4.0 with express pinned to 4.18.2, and the right document bumps the version to 2.0.1, upgrades express to 4.19.2, drops zod, adds pino, adds a lint script and appends http to the keywords array.
The structural tree shows:
versionhighlighted amber:"1.4.0"becomes"2.0.1"dependencies.expressamber:"4.18.2"becomes"4.19.2"dependencies.zodred (removed) anddependencies.pinogreen (added)scripts.lintgreen (added)keywords.2green (the new"http"element)
The summary bar reads something like 2 added, 1 removed, 3 changed, and the exported report lists each of those as a one-line path. Every figure is computed locally in your browser — none of your JSON is ever uploaded or stored on a server.