JSON Diff online

Processed locally
app.diff.view

You can also load data via #data={"name":"Ada"} or #url=... It is cleared from the address bar after it is read.

Paste two JSON documents into the left and right panes and compare by structure: added, removed, or changed values. Structured Diff is a better fit than plain-text Diff when the shape is the same but values differ—API upgrades and config changes, for example. Before a release, paste v1 / v2 sample responses here. That is less likely to miss nested fields than diffing a minified single line in Git.

Semantic comparison

Focus on path-level differences, not whether a particular line’s spaces line up. When indentation or key order differs, structured comparison is usually quieter than a text Diff.

Results mark added, modified, and deleted items, and you can filter to one kind of change.

Built for reviewing changes

See which keys changed before you decide whether the client needs an update. A number becoming a string, or a field being removed, is more reliable than scanning 500 lines by eye.

QA can also regression-check a baseline against the current response.

Sort before you compare

If key order is unstable, sort first, then paste here. If an array is a set with no order contract, order changes may be false positives—judge them against the product rules.

Redact sensitive fields before comparing, even though this page does not upload data.

Example

Left A
{
  "name": "Alice",
  "age": 30,
  "tags": ["dev", "json"]
}
Right B (changes relative to A)
{
  "name": "Alice",
  "age": 31,
  "tags": ["dev", "tools"],
  "active": true
}
Does array order count as a difference?

Yes—items are compared by position. Two lists that only differ in order are still flagged.

What about very large files?

Comparison runs on this computer. For large payloads, extract the relevant slice with JSONPath first.

What if they are identical?

You will see that both JSON documents are identical, with no highlighted diffs.

Are null and a missing field the same?

No. One side is null and the other side has no such key. They are marked separately and mean different things.

Recommended workflow

  1. Prepare old (A) and new (B) samples. Format each first if needed.
  2. Click “Compare” and filter by added / modified / deleted.
  3. Note the paths you need for a CHANGELOG or test assertions.
  4. If only key order differs, sort both sides first, then compare again.

Diff shows “how two documents differ.” Schema shows “whether they match a contract.” API upgrades should do both.