Developer Utility

JSON Diff Checker

Compare two JSON datasets to find added, removed, and changed values. Useful for checking API responses, configuration files, and test data differences.

JSON structure comparison Compare object, array, and nested field differences by JSON path.
Change classification Separate added, removed, changed, and unchanged items for quick API response review.
Format, copy, and download Format JSON, copy comparison results, and download a text report.

JSON input

Enter the original JSON and the changed JSON to compare.

Path-based comparison Show changes by JSON paths such as root.user.profile.name and root.items[0].price.
Type difference check Detect type changes between string, number, boolean, null, object, and array values.
Original keys 0 items Changed keys 0 items Waiting to compare

Comparison result

Check added, removed, and changed JSON paths and values.

Ready
0 Added
0 Removed
0 Changed
0 Same
Enter two JSON datasets and click the compare button.

How JSON comparison works

The result is based on parsed JSON structure, paths, and values rather than plain text comparison.

Added values

Fields or array items that exist only in the changed JSON. Useful for checking new API fields or settings.

Removed values

Fields that existed in the original JSON but disappeared from the changed JSON.

Changed values

Items with the same path but different values or types. Useful for version, response, and setting changes.

Practical guide

Compare JSON values, types and array positions

Paste an original and a changed JSON document to locate additions, removals and changes. The comparison reads parsed data: indentation and object-key order do not matter, while array positions and value types do.

Who this helps

  • Developers comparing API responses
  • People reviewing configuration changes

When to use this tool

  • Find a missing response field.
  • Check whether a numeric field became a string.

From input to a checked result

  1. 1

    Paste the original JSON on the left and the changed JSON on the right.

  2. 2

    Choose whether to display type details and identical values.

  3. 3

    Compare, then read the path and before/after values.

  4. 4

    Copy or download the last comparison report. Recompare after editing the input.

Example 1

A type change

Input
Left: {"version":1,"active":true} Right: {"version":"1","active":true}
Result
1 change at root.version: number → string

Turning off type details only hides the type labels; it does not treat 1 and "1" as equal.

Example 2

Array order matters

Input
Left: {"items":["A","B"]} Right: {"items":["B","A"]}
Result
2 changes: root.items[0] and root.items[1]

Elements are compared at the same index, without matching by ID or detecting moves.

How it works

The browser parses both inputs, compares each object's own keys, and walks arrays by index. Paths start at root; a key containing a dot uses brackets, such as root["a.b"], to distinguish it from root.a.b. Comparison accepts up to 500,000 characters per trimmed input and a nesting depth of 100. Formatting adds indentation; it does not alphabetize keys.

Limitations

  • Duplicate object keys collapse during parsing, so this is not a duplicate-key detector.
  • Large integers can lose precision in JavaScript Number. Use quoted strings when comparing exact long identifiers.
  • A newly added object or array counts as one added path; counts are not a total of every nested field.
  • This does not validate a JSON Schema or determine API compatibility.
Your data

The tool compares text in browser memory without uploading or saving the JSON. A copied or downloaded report can contain the original values. Reloading the page clears the input.

Frequently asked questions

Does object-key order create a difference?

No. The same keys and values compare equally regardless of order or whitespace.

Can I ignore types or array order?

No. The type switch controls report detail only. Arrays always compare by position.

Why are some paths written with brackets?

Brackets preserve keys containing dots, spaces or other special characters. root["a.b"] is a single key, while root.a.b is a nested field.