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

ORIGINAL · A
Status: Empty0 chars
MODIFIED · B
Status: Empty0 chars

Live diff is on. Differences appear as you type.

DIFF
Output: Empty

$ 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.

HOW IT WORKS

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.

Docs · Compare

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

A field changed
{
  "name": "Ada",
  "role": "engineer"
}

Paste into A and B. The role value lights up as a changed line facing its pair.

A field added
{
  "name": "Ada",
  "role": "engineer",
  "active": true
}

B gains an active flag. The diff reports it as added.

Array element removed
{
  "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

FAQ

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.