JSON diff checker
Paste two JSON objects and instantly see every semantic difference: added keys, removed keys, and changed values at any depth with full paths.
About this tool
Comparing two JSON objects by eye is tedious and error-prone, especially when they are deeply nested or have dozens of keys. Pasting both into a generic text diff tool produces misleading results because key ordering, whitespace, and indentation affect line-by-line comparisons even when the data is logically identical. This tool takes a different approach: it parses both inputs as JSON and compares them structurally, key by key and element by element at every depth level. The result is a flat list of semantic changes — added keys, removed keys, and changed values — each annotated with a dot-notation path (for example user.address.city or items[2].price) so you can locate the change instantly in the original document. Type changes (such as a string becoming a number) are shown as value changes. Array comparisons are index-based. The summary line at the top shows total added, removed, and changed counts at a glance, and a copy button exports the full change list as plain text. Both inputs are validated before comparison — any JSON syntax error is reported immediately with a clear message so you can fix it before diffing.
- 1
Paste your original JSON into the left panel.
- 2
Paste the modified JSON into the right panel.
- 3
Click Compare — the change list appears instantly.
- 4
Each row shows the path, change type (added / removed / changed), and the old and new values.
- 5
Use the Copy button to export the change list as plain text.
Compare API responses before and after a code change to verify the payload shape.
Diff two config files to find exactly what changed between environments.
Check that a migration preserved all expected fields in a transformed document.
Audit changes to a feature flag or settings object between deploys.
Key added
{"name":"Alice"}
vs
{"name":"Alice","role":"admin"}1 added — role: "admin"Nested value changed
{"user":{"age":30}}
vs
{"user":{"age":31}}1 changed — user.age: 30 → 31SyntaxError on the left / right side
Cause: One of the inputs is not valid JSON. Common culprits: trailing commas, single-quoted strings, unquoted keys, or comments.
Fix: Use the JSON Formatter tool on this site to validate and fix each input before comparing.
All keys show as added and removed instead of changed
Cause: The root values are of different types — for example one input is an array and the other is an object.
Fix: Make sure both inputs share the same root type (both objects or both arrays).
These answers explain common json diff tasks, expected input formats, and edge cases so both visitors and search engines can understand what this tool does.
How is this different from a text diff tool?
A text diff compares line by line. JSON key ordering and indentation affect text diffs even when the data is identical. This tool parses both inputs and compares the data structure semantically, so reordered keys and reformatted whitespace don't produce false positives.
How are arrays compared?
Arrays are compared by index. Element 0 in the original is compared to element 0 in the modified version, and so on. If the arrays have different lengths, extra elements are shown as added or removed.
Are type changes detected?
Yes. If a value changes from one type to another — for example a string "30" becoming a number 30 — it is reported as a changed value with both the old and new values shown.
What path notation is used?
Object keys use dot notation (user.address.city). Array indices use bracket notation (items[2].price). Paths are absolute from the root of the document.