Developer tools

Structural JSON diff

Compare nested JSON values by keys and array positions without rounding large identifiers.

Structural JSON diff
Esc to restore

Your inputs

UTF-8 JSON up to 2 MB, 50,000 values and 64 levels. Duplicate object member names are rejected; numeric tokens are preserved.

UTF-8 JSON, NDJSON or GeoJSON up to 2 MB. Files stay on this device.

UTF-8 JSON up to 2 MB, 50,000 values and 64 levels. Duplicate object member names are rejected; numeric tokens are preserved.

UTF-8 JSON, NDJSON or GeoJSON up to 2 MB. Files stay on this device.

Results update as you type. Larger files run when you press Update result.

Your result

LOCAL & PRIVATE

Your result will appear here.

Your inputs stay in this browser. Nothing is uploaded or saved.

A clear answer. Here’s how.

Recursively compares object members without regard to key order and arrays by index. Reports added, removed or changed values using escaped JSON Pointer paths. Numeric equality normalises decimal coefficients/exponents without converting them to floating point, so 1 and 1.0 compare equal while distinct large integers remain different. Limited to 10,000 reported changes. This is an index-based structural diff, not an optimal array edit script.

See a worked example

Worked example

A fixed demonstration, separate from the values you enter above.

Original JSON
{"name":"Ada","items":[{"id":9007199254740993,"active":true},{"id":2,"active":false}],"settings":{"theme":"blue"}}
Updated JSON
{"name":"Ada","items":[{"id":9007199254740993,"active":false}],"settings":{"theme":"violet"}}

Example result

Example result
ChangeJSON PointerBeforeAfter
Changed/items/0/activetruefalse
Removed/items/1{"id":2,"active":false}
Changed/settings/theme"blue""violet"

Object member order is ignored; arrays compare by index. Numerically equivalent decimal spellings compare equal without losing integer precision.