Developer Tools

JSON Compare

Compare JSON responses, settings, or saved records without treating indentation and object key order as changes. Each result includes a JSON Pointer path and the before and after values.

Free online tool

Loading tool…

Object key order is always ignored. Arrays compare by index by default. Unordered arrays compare as multisets; a changed unordered array is reported as a whole. Pointers use original array indices, match exactly, and ignore the entire subtree. Escape / in keys as ~1 and ~ as ~0.

6 difference(s) found.

ADDED: /active

After

true

CHANGED: /id

Before

90071992547409931234

After

90071992547409931235

CHANGED: /name

Before

"Ada"

After

"Ada Lovelace"

CHANGED: /roles/0

Before

"reader"

After

"writer"

CHANGED: /roles/1

Before

"writer"

After

"reader"

CHANGED: /updatedAt

Before

"2026-01-01"

After

"2026-02-01"

Numbers compare by exact decimal value: 1, 1.0, and 1e0 are equal. Long numeric IDs stay distinct. Duplicate object keys are rejected. All comparison happens locally.

Both documents and the comparison report stay in your browser unless you copy or download them.

GET STARTED

How to use the JSON Compare

  1. 01

    Paste the original document under Before JSON and the new document under After JSON.

  2. 02

    Keep ordered arrays for position-sensitive data, or enable Ignore array order when array elements represent an unordered collection.

  3. 03

    Optionally enter one JSON Pointer per line to ignore a field or subtree. Copy or download the resulting difference report.

Examples

Ignore a changing timestamp

Enter /updatedAt to exclude that property at the root. Enter /metadata/requestId to exclude a nested request identifier. These are exact paths, not wildcards or field names matched everywhere.

Compare reordered collections

With array order ignored, [1,2,2] matches [2,1,2]. It does not match [1,2], because duplicate counts remain meaningful.

Spot a changed numeric identifier

90071992547409931234 and 90071992547409931235 are different. Numbers are compared as exact decimal values, so 1, 1.0, and 1e0 compare equal.

What counts as a difference?

Whitespace, alternate string escapes for the same text, and object member order do not count. Strings remain distinct from numbers, and null remains distinct from a missing property. Ordered arrays compare by index, so inserting an item can produce several subsequent changes.

Read and exclude JSON Pointer paths

A path such as /users/0/name identifies the name property of the first array element. A slash inside a key is written ~1, and a tilde is written ~0. The root is displayed as (root). Exclusions apply to an entire subtree and use original array indices, even in unordered mode.

Unordered arrays and reports

When order is ignored, elements compare as a multiset at every array level. A changed unordered array is reported as one change for the whole array. The interface shows the first 200 changes; a downloaded report includes every result.

What to know

  • Inputs must be strict JSON, with no more than 2 million characters and 128 nesting levels per document.
  • There is no fuzzy array matching by an ID field. Sort or reshape records first when you need that relationship.

Common questions

Can I compare JSON objects with different key order?

Yes. Object key order is always ignored, including inside nested objects and arrays.

Does this produce a JSON Patch?

No. The output is a readable list of added, removed, and changed paths, with values for review. It is not an executable RFC 6902 patch.

What happens to duplicate object keys?

They are rejected because comparing an object with multiple values under the same key would be ambiguous. Remove or rename the duplicate fields first.

Are string comparisons case-sensitive?

Yes. Strings compare by their decoded content without case folding, whitespace trimming, or Unicode normalization.

Sources & references