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.