Tool
JSON structural diff tool
Compare two JSON documents by structure, not line order — reordered keys and reformatting never count as differences. See added, removed and changed fields as a path list or side by side, all in your browser.
Input
Processing: parsing and comparison run entirely in this browser tab — your JSON is never sent, stored or written into links. Closing the tab discards it.
Diff result
How the comparison works
This tool compares two JSON documents structurally, not line by line: object key order, indentation and whitespace never count as differences. Every leaf field is walked once and reported at its real path — $.data.models[0].price — so a reformatted file still produces a clean, minimal diff.
Parsing is forgiving where developers actually need it: trailing commas before } or ] are tolerated and reported, and syntax errors point to the exact line and column. Duplicate keys are counted as a note (the last value wins, like JSON.parse). With Ignore array order on, array elements match as multisets — reordering is free, while genuinely missing or extra elements still show up. Ignore case and empty-value differences treats "", null and a missing key as equivalent, and folds letter case in strings.
The export copies a real RFC 6902 JSON Patch (add/remove/replace on JSON Pointer paths) or a Markdown table you can paste straight into a PR description or API doc. Everything runs in this tab — nothing is uploaded.
FAQ
How is this different from a text diff?
A text diff compares lines, so reformatting or reordering keys produces noise. This tool parses both documents and compares them field by field — key order, indentation and whitespace never count as changes. You see the real path of every difference, like $.data.models[0].price.
Is invalid JSON rejected?
Syntax errors are reported with the exact line and column. Trailing commas before } or ] are tolerated and counted as a note — everything else strict JSON.parse rejects is rejected here too. Duplicate keys are flagged; the last value wins.
What does 'Ignore array order' actually compare?
Elements are matched as multisets by their canonical structure: reordering the same elements reports nothing, while genuinely added or missing elements still show up at their indexes. Elements that only moved are marked with their new index.
Is my JSON uploaded or stored?
No. Parsing, comparing and rendering all run inside this browser tab — nothing is sent to any server, stored, or written into a URL. Closing the tab discards it.