JSON diff. Semantic, not line-by-line.
Files never leave your browser. Nothing is uploaded.
A diff that understands JSON
A plain text diff compares characters, so a key that merely moved position shows up as a change. This tool parses both documents and compares the structure: two objects with the same keys in a different order are equal, and every real difference is reported with its exact path, like limits.maxSizeMB or tags[2]. Turn on array-order-independent matching for reordered lists, relax key casing, or set a numeric tolerance so 0.30000000000000004 stops counting as a change. Everything runs locally, paste API responses, configs or exports with secrets in them without a second thought.
How to use the JSON Diff tool
JSON Diff compares two JSON documents by structure instead of by line. It parses both, walks every key and array item, and lists what was added, removed or changed, each with its exact path such as limits.maxSizeMB or tags[2]. Key order never counts as a change. Use it to check API responses, config changes, fixtures and data exports.
Step by step
-
Paste the two documents
Put the older version in Original (A) and the newer one in Changed (B). You can also press Load .json above either box to pick a file or drop one on it, up to 15 MB. Each box checks itself as you type and shows valid, or the line and column of the first error.
-
Set the options
Tick Ignore array order to match array items wherever they sit, so a reordered list is not reported as changed. Untick Case-sensitive keys (on by default) to treat userId and userid as the same key. Enter a Numeric tolerance above the default 0 to treat close numbers as equal.
-
Run the comparison
Press Compare. The summary shows the added, removed and changed counts plus the number of unchanged values. Changing an option afterwards runs the comparison again by itself. Press Load sample to see a worked example first.
-
Review the changes
The Changes view groups results under Added, Removed and Changed. Each row shows the path and the value; changed rows show the old value, an arrow and the new value. Use Expand all and Collapse all to open or fold the three groups.
-
Check the documents side by side
Press Side by side to see both documents re-formatted with line numbers. Removed lines are tinted red on the A side, added lines green on the B side, and changed lines amber on both.
-
Swap, export or clear
Press ⇄ Swap to exchange the two boxes and reverse the direction. Press Copy report for a plain text summary, or Download .txt and Download .json to save it as json-diff-report.txt or json-diff.json. Press Clear to empty both boxes.
Reading the result
- Paths use dots for object keys and brackets for array positions. tags[2] is the third item of tags, and a key that is not a plain name is quoted, for example headers["content-type"].
- With the sample and the default options the summary reads +3 added, −2 removed, ~5 changed and 2 unchanged values. Three of the changes are tags[0], tags[1] and tags[2], because the list was reordered.
- Turn on Ignore array order with the same sample and it becomes +4 added, −3 removed, ~2 changed and 4 unchanged values. Only the tag that really left (tools) and the one that arrived (offline) are reported.
- When nothing differs, the panel says the two documents are semantically identical, even if their key order or spacing is different.
- If a value changes type, for example from an object to a string, it is reported once as changed at that path rather than as many small changes.
Tips and common mistakes
- Without Ignore array order, arrays are compared position by position. Inserting one item at the start makes every later item look changed, so turn the option on for lists where order does not matter.
- Use Numeric tolerance for floating point noise. A tolerance of 0.001 treats 0.1 and 0.1004 as equal; the check is the plain difference, not a percentage.
- If Compare refuses to run, look under each box for the red error with its line and column. Trailing commas and single quotes are the usual causes.
- Long values are cut short in the Changes view. Hover a value to see more of it, or download the report for the full text.
- Pressing Tab inside either box adds two spaces instead of moving focus. Click outside the box to move on.
Privacy and limits
Both documents are parsed and compared in your browser. Nothing you paste or load is uploaded or saved, so closing the tab clears it. Files over 15 MB are refused, and very large documents may take a moment to compare.
Every difference, with its address.
a.b[2].c..txt or .json.Frequently asked questions.
Is JSON Diff free?
Is it private? Are my files uploaded anywhere?
What is the difference between JSON Diff and a plain text diff?
How do the array-order and numeric-tolerance options work?
How do I read the paths in the results?
limits.maxSizeMB means the maxSizeMB key inside the limits object, and tags[2] means the third item of the tags array. Keys that aren't valid identifiers are shown quoted, like headers["content-type"].Does it work offline?
Published · Last updated .