JSON Diff
JSON Diff compares two documents — Original (A) and Modified (B) — by their structure, not as text. You see only real changes.
What counts as a change
- Key order never counts.
{"a":1,"b":2}equals{"b":2,"a":1}. - Formatting never counts — whitespace, indentation,
1.0vs1,"\u00e9"vs"é". - Changes are labelled Added, Removed, Changed, or Type changed (for example the number
56.3becoming the string"73.80"— often a bug).
Matching array items
Choose how arrays are compared with the Arrays option:
| Mode | Use it when | Example path |
|---|---|---|
| Smart (default) | Most of the time. Finds an id field (id, uuid, sku, userId…) and matches items by it, wherever they are. Without one, it lines up unchanged items so a single insertion is a single change. |
$.items[sku="BK-101"].qty |
| Match by key… | You know the id field, e.g. code. |
$.rates[code="INR"] |
| By position | Order matters (e.g. steps, rankings). | $.steps[2] |
| Ignore order | Arrays are sets, like tags. | — |
Ignoring noisy fields
Type field names into Ignore fields, separated by commas. They’re ignored at any depth. Wildcards work:
updatedAt, *At, requestId, trace*
When a field that looks like a timestamp or request id changes, CurlyJSON suggests it — click + ignore updatedAt to add it.
Views
- Changes — a list with filters (Added / Removed / Changed / Type). Click a path to copy it.
- Side by side — both documents normalised (keys sorted, ignored fields hidden, matched items aligned) with unchanged parts folded.
- JSON Patch — standard RFC 6902 operations that turn A into B exactly. Copy or download.
- ✦ Summary — a short plain-English summary of the changes (AI features).
Sharing results
- Copy report copies a Markdown table you can paste into Jira, GitHub or Slack.
- Share creates a link containing both documents.
- Swap exchanges A and B. Drop two files at once to fill both sides.
Found a mistake? Suggest an edit on GitHub.