Home · Free tools · JSON compare

Compare two JSON files

Paste or drop two JSON documents. Key order and indentation are treated as syntax, so two exports of the same object compare as identical; what comes back is every real difference with the path it lives at — regions[2], billing/plan — and both values side by side. Download the list as a table. Neither document is uploaded.

First document paste, or drop a .json file

Second document the version you want to check

Nothing is uploaded. The file is read by JavaScript in this tab and never leaves your computer — no server sees it, and closing the tab throws it away.

How to compare two JSON files

  1. Load both documents. Paste them, or drop a .json file onto either box. Both are parsed in this tab; there is no upload.
  2. Read the differences by path. Each row is one difference: where it lives, whether it was added, removed or changed, and the value on each side.
  3. Ignore what is only syntax. Re-ordered keys and different indentation produce no rows at all — only real changes are listed.
  4. Take the list with you. Download it as CSV, or copy it, and paste it into the ticket or the review.

Key order and formatting are syntax, not content

{"b":1,"a":2} and {"a":2,"b":1} are the same object. Every JSON library that re-serializes a document is free to write the keys in a different order, and most of them do, so a line-based diff of two exports of the same record routinely comes back entirely red. The same goes for indentation, and for whether the file ends with a newline.

This page parses both sides first and compares the parsed values. Re-ordered keys and different formatting produce no rows. What is left is the set of differences that would actually change how a consumer behaves.

Arrays keep their order, objects do not

The distinction matters and is easy to get wrong in the other direction. In JSON an object's keys are a set — order carries no meaning. An array's items are a sequence — order is the meaning. So [1,2,3] against [3,2,1] is reported as two changed positions, while the two objects above are reported as identical. An item appended to an array shows as one addition at path[2], not as a rewrite of everything after it.

Every difference has an address

The output is a list, not two panes to read across. Each row carries the path the difference lives at, so billing/regions[2] can be pasted into a ticket, searched for in the source file, or handed to whoever owns that field. Longer subtrees are summarized rather than dumped — a row that reads {4 fields} against [9 items] tells you the shape changed, and the rows underneath tell you how.

The whole list downloads as CSV, which is the form it usually needs to be in next: a column of paths is something you can sort, filter and check off.

Types are compared, not coerced

5 and "5" are different, and so are false and 0, and null and a missing key. Each of those pairs is the kind of thing an API changes quietly in a minor release and a loosely-typed comparison hides. They are all reported here.

What it will not do

  • Merge. It reports differences; it does not produce a third document.
  • Match array items by id. Arrays compare by position. If your two files hold the same records in a different order, sort them by key first — or, if the data is tabular, the file comparison tool matches rows by a key column, which is exactly that job.
  • Repair broken JSON. A file that does not parse is reported with the position the parser objected to, which is the useful half of the answer, and not guessed at.

Nothing leaves this tab

JSON pasted into comparison sites is usually an API response, a config file or an export — the kind of thing that carries keys, tokens and customer records. Both documents are parsed and compared by JavaScript running on your machine. There is no request to send, so nothing to intercept, log or retain.

Questions people ask

Why do two files that look different compare as identical?

Because the differences were formatting or key order, and neither changes what the document means. If you need a character-level comparison instead, that is a text diff, and a JSON-aware tool is the wrong one to reach for.

Does it handle large JSON files?

Files in the megabytes parse and compare in the tab. The preview lists the first 300 differences and the CSV download has all of them, so a document with thousands of changes stays readable.

Can it compare JSON arrays of records?

Yes, by position. If the same records appear in a different order in the two files, sort both by their id first — position is the only ordering an array actually carries.

Does it support JSON Lines or JSON5?

No — standard JSON only. A JSON Lines file is one document per line; compare a single line, or convert the file to a proper array first. Comments and trailing commas will be reported as a parse error with their position.

Are my files uploaded anywhere?

No. The file is read by JavaScript running in this tab, using the browser's own DecompressionStream to unzip .xlsx and a parser that runs on your machine. There is no server call in the page — you can watch the network tab while you use it. Close the tab and the data is gone.

Do this on your own machine instead

TableDI is a desktop spreadsheet workspace that runs entirely on your machine. Import the file, fix it, chart it — nothing is uploaded, and there is no account to create.

Free forever, not a trial — no account, no card. macOS today; a Windows build is in progress. What the paid tier adds.

Last reviewed 2026-09-01 by the TableDI team. Something wrong on this page? Tell us — it is one inbox, read by the people who build TableDI.