Text & Data

JSON Diff & Compare

Compare two JSON objects semantically — added, removed and changed values are listed by path, independent of key order. Perfect for diffing API responses and config files.

Original (A)
Changed (B)
Differences

Paste two JSON values to compare them by path.

About this tool

JSON Diff compares two JSON values semantically and tells you exactly what changed — which keys were added, which were removed and which values differ — listed by their path. Unlike a plain text diff, it ignores key order and formatting, so re-ordered fields or different indentation do not create noise.

It is built for the everyday work of comparing API responses, config files and fixtures. Everything is processed in your browser, so two payloads full of production data can be diffed without either ever being uploaded.

How to use

  1. Paste the first JSON value into the left input.
  2. Paste the second JSON value into the right input.
  3. The tool parses both and reports the difference immediately.
  4. Read each change by its path — for example user.address.city.
  5. Note which entries are marked added, removed or changed.
  6. Fix the source and re-run to confirm the two are now identical.

Features

  • Semantic comparison that ignores key order and whitespace.
  • Every change reported by its full path into the object.
  • Clear categories: added, removed and changed values.
  • Handles nested objects and arrays at any depth.
  • Great for diffing API responses, config files and test fixtures.
  • Fully client-side, so production payloads are never uploaded.

Frequently asked questions

Is my data safe when comparing two JSON payloads?

Yes. Both values are parsed and compared in your browser with JavaScript, so nothing is sent to a server — safe for production or sensitive data.

Does key order affect the comparison?

No. The diff is semantic, so two objects with the same keys and values are treated as equal even if the keys appear in a different order.

How are arrays compared?

Arrays are compared by position, so a change at a given index is reported by its path. Re-ordering elements will therefore show up as differences.

What does a change reported by path mean?

Each difference is labelled with the route to reach it, such as items.0.price, so you can locate the exact field that differs inside a deep structure.

Why is a diff shown when the two texts look the same?

Look for subtle differences the eye misses — a number stored as a string, a trailing null, or an extra key. Because the comparison is by value and type, these count as real changes.