JSON Diff
Compare two JSON documents by structure β key order and formatting ignored.
About this tool
Paste an original and a changed JSON; every real difference is listed by path β $.user.tags[2] β as added, removed or changed. Reordered keys and reformatting produce no noise. Runs in the page.
Structural diff versus text diff
A text diff of two JSON files is mostly lies: pretty-printing, key order and trailing commas light up every line while the one value that actually changed hides in the noise. A structural diff parses both documents and walks them together, so the only output is semantic change β a key added here, a number altered there, an array one element longer. Paths use the JSONPath convention, so a report like $.items[3].price: 9.99 β 12.5 drops you straight onto the change. Daily uses: comparing an API response before and after a deploy, config files across staging and production, package manifests between versions, and βwhat did this migration do to the dataβ. Arrays are compared positionally, which is honest but means an item inserted at the front reports as every subsequent item changing β sort arrays first if order isn't meaningful. When formatting IS what you're checking, the text diff is the right tool; the JSON formatter validates and normalises either side.
Frequently asked questions
Does key order matter?
No β objects are compared by key, so reordered properties produce no differences. Only values, additions and removals are reported.
How are arrays compared?
By position: item 0 against item 0, and so on. An insertion at the front therefore shows later items as changed β sort arrays first if their order isn't significant.
What does the path mean?
JSONPath notation from the root ($): $.user.address.city or $.items[2]. It tells you exactly where in the document the difference lives.
Is my JSON uploaded?
No β both documents are parsed and compared in your browser.