Original (A)
Changed (B)
Differences
5 diffs| Path | Change | Before | After |
|---|---|---|---|
| $.license | added | "MIT" | |
| $.version | changed | 2 | 3 |
| $.tags[2] | removed | "seo" | |
| $.owner.id | changed | 7 | 9 |
| $.owner.active | changed | true | false |
| Path | Change | Before | After |
|---|---|---|---|
| $.license | added | "MIT" | |
| $.version | changed | 2 | 3 |
| $.tags[2] | removed | "seo" | |
| $.owner.id | changed | 7 | 9 |
| $.owner.active | changed | true | false |
Compare two JSON documents side by side and see exactly what changed. Paste your before and after JSON into the live tool — every added, removed and changed value is reported as a precise JSON path.
The tool parses both documents completely before comparing, so ordering inside objects and all whitespace are correctly ignored — only meaningful differences surface. Comparison rules:
{ "name": "Sketch", "version": 2, "tags": ["free", "pro"] }- $.version before 2
+ $.version after 3
- $.tags[1] before "pro"
+ $.license after "MIT"A config or fixture changed in a pull request — but the diff is buried in a giant file. Paste both versions here to see a compact list of what actually moved.
Run an endpoint before and after a deploy, save both responses, and diff them. You'll see exactly which fields the new version added, removed or renamed.
Diff the exported state before and after a data migration to confirm only the intended keys changed.
"7" != 7Why: One document stores numbers as numbers, the other as quoted strings (for example an export that quotes everything).
Fix: Normalize types on one side before comparing — parse the numeric strings back to numbers.
Everything shifted, table is a sea of redWhy: An element was inserted or removed in the middle of an array, shifting every later index.
Fix: Diff at the object level instead, or sort array records by a stable key so positions align.
Parse error on one sideWhy: A truncated or malformed document — often a copy that ended mid-payload.
Fix: Re-copy the full document; the reported line and column points at the first invalid token.
Both documents are parsed into trees, then walked together by key. Values are compared strictly (7, 7.0 and "7" all differ); arrays are compared position by position. You get one row per path where the value was added, removed or changed.
Yes. When a key exists on both sides but the value differs you get a "changed" row showing before and after. Rows with only an after value are "added"; only a before value are "removed".
Whitespace is ignored completely — diffs are taken on parsed JSON, not text. Key order is also ignored for objects (it is meaningless in JSON), but element order inside arrays is significant and positional.
No. The entire diff runs locally in your browser. Nothing you paste ever leaves this page.
The diff for that side is skipped and the parse error is shown in the results box, along with the location (line/column) of the problem so you can fix it.
Yes. Copy Diff copies a unified, line-oriented view of every change (paths prefixed + and -); Download saves that same view as a text file.
Last reviewed September 2026 · DataFormatter team — this tool processes data locally in your browser.