Skip to main content
FreeToolsHub

JSON Compare

Paste an original and a changed JSON document and get a clear list of what is different: which keys were added or removed, which values changed, and exactly where. Key order never causes false alarms.

  • Free to use
  • No sign-up
  • Runs in your browser

Good to know

Your JSON is parsed as data and never executed or uploaded. Numbers with 16 or more digits may lose precision in any JavaScript tool, so keep very large ids as strings.

How to use the JSON Compare

  1. Step 1: Paste the original JSON on the left and the changed JSON on the right, or press Load example.

  2. Step 2: Choose whether the order of items inside arrays should matter. Key order in objects is always ignored.

  3. Step 3: Press Compare JSON. Syntax errors are reported with a line and column on the side that has them.

  4. Step 4: Read the summary and the list of differences. Each one shows a path such as $.owner.city, the label Added, Removed, Changed or Type changed, and the before and after values.

  5. Step 5: Press Copy report or Download report to share the differences as plain text.

Features and benefits

  • Exact paths

    Every difference points to its location, such as $.items[2].price, so you can find it in the original file at once.

  • Structure, not text

    The documents are compared as data. Reordered keys and different indentation are not reported as changes.

  • Array order option

    Compare arrays position by position, or treat them as unordered lists when the order does not matter.

  • Type changes spelled out

    A number that became a string, or an object that became a list, is labelled Type changed instead of a plain value change.

  • Shareable report

    Copy or download a plain-text report of all differences for a pull request, ticket or email.

How the comparison works

Both documents are parsed first, so a missing comma or an unquoted key is reported with its line and column before any comparison starts. The parsed values are then walked together. Objects are compared key by key, so the order of keys is irrelevant. Arrays are compared by position by default: the first item against the first item, the second against the second, and any extra items are reported as added or removed.

When two values have a different kind, for example a number on one side and a string on the other, the difference is reported as a type change. That is usually more useful than a plain value change, because a type change often points to a bug in a serializer or a form.

When to ignore array order

Lists such as tags, permissions or a set of ids often come back in a different order from one call to the next without any real change. Turn on the option to ignore array order and the tool matches items by their content instead of their position, reporting only the items that exist on one side and not the other. Leave it off when order carries meaning, such as steps in a sequence or rows in a ranking.

Limits to know about

Very long lists of differences are cut off after 2,000 entries, and the summary says when that happens. JSON has no comments, so documents with comments or trailing commas are reported as invalid. If a value is a very large integer, JavaScript may round it; keep such values as strings in your data.

Example use cases

  • Comparing API responses

    Check what changed between two versions of an endpoint, or between staging and production.

  • Reviewing configuration files

    See exactly which settings differ between two environments before a release.

  • Debugging test failures

    Compare expected and actual JSON from a failing test to spot the one field that differs.

  • Checking data migrations

    Confirm that a transformed document still matches the original apart from the intended changes.

Frequently asked questions

Does the order of keys matter?

No. Two objects with the same keys and values are equal whatever order the keys are written in.

How are arrays compared?

By position by default. Turn on Ignore the order of items in arrays to compare them as unordered lists instead.

Is my JSON sent to a server?

No. Both documents are parsed and compared inside your browser and are never uploaded or stored.

Can it compare very large files?

Each side can hold up to 2,000,000 characters. Large documents work, but the comparison may take a moment on a phone.

What does Type changed mean?

The value is a different kind on each side, for example the number 1 became the string "1", or null became an object.

Last updated 11 November 2026.