JSON Diff
Compare two JSON documents and see exactly what changed.
Your data is processed entirely in your browser and is never uploaded.
Tool workspace
Live diff is on. Differences appear as you type.
$ diff a.json b.json
Paste two snippets above, or load the sample, and the differences render here, line by line, the instant they change.
Showing the first 20,000 lines of a very large diff.
Compare JSON in three steps
Paste both sides
Original in A, modified in B. The diff runs as you type, with no upload and no waiting.
Read the changes
Additions in teal, deletions in red, changed lines facing each other. Toggle unified for a single column.
Tune & export
Ignore whitespace or case to cut noise, then copy or download the unified patch.
A diff sees structure, not just lines
JSON Diff parses both documents and compares them as data, so it understands structure: a reformatted or re-keyed object doesn't read as a change, and an added, removed, or changed field is reported precisely. The diff renders side-by-side (additions teal, removals red, changed lines facing each other) or as a single unified column you can copy or download as a patch. Options let you ignore whitespace or case to cut noise, and a similarity score tells you at a glance how much the two sides share. Everything runs locally, in a worker for large inputs.
Things to know
Reformatting is not a change
Because the diff compares parsed data, adding or removing indentation produces no diff at all. That's the point: you're comparing meaning, not bytes. Text Diff is the tool if you care about the exact lines as written.
One side won't parse
Both inputs must be valid JSON. If a side has a syntax error, the diff can't compare it. fix that side (the Validator pinpoints it) or load a corrected version.
{
"name": "Ada",
"role": "engineer",
}What the similarity score means
It's the share of identical lines on both sides, as a percentage of all lines involved. 100% means identical; 0% means nothing in common. A changed value next to an unchanged block lands somewhere between.
Ignore whitespace / case for reviews
Toggling ignore-whitespace or ignore-case silences cosmetic noise so a code review reads the real change. They compare the parsed values, so they apply cleanly to structured data.
Try these
{
"name": "Ada",
"role": "engineer"
}Paste into A and B. The role value lights up as a changed line facing its pair.
{
"name": "Ada",
"role": "engineer",
"active": true
}B gains an active flag. The diff reports it as added.
{
"tags": ["pioneer", "writer", "analyst"]
}A has three tags, B has two. The missing one shows as removed.
pair this withFormat a side → JSON Formatter·Validate a side → JSON Validator
Frequently asked questions
Is either document uploaded?
No. The comparison runs entirely in your browser, in a background worker for large inputs. Neither side ever leaves your machine.
Why do some changed lines face each other?
When a line is removed and another added in the same place, the diff pairs them onto one row so you can read the before/after at a glance, instead of scrolling a delete block against an insert block.
What does the similarity score mean?
It's the share of lines that are identical on both sides, as a percentage of all lines involved. 100% means identical; 0% means nothing in common.