What a JSON diff checker does
A JSON diff checker compares two JSON documents and lists what changed. This one shows each change with its path, for example $.user.email, the old value and the new value. It compares the data and ignores the layout.
A plain text diff does not work well for JSON. Two files can hold the same data with the keys in another order, or one file can sit on a single line. A text diff then marks every line as changed. Here, only real changes show up.
Exact numbers: JSON compare that does not round
Many online JSON compare tools read every number as a floating point value. A number with 17 or more digits then loses its last digits. Two different ids can look the same. In our test on October 21, 2026, three of four popular tools called the two numbers below identical, and one of them rewrote both as 12345678901234567000.
| Document | Value |
|---|---|
| Original | 12345678901234567890 |
| Changed | 12345678901234567891 |
| This tool | 1 change. Numbers keep every digit. |
Numbers still compare by value, so 1.0, 1 and 1e0 are equal. The example also holds 10.5 and 10.50. They match.
How to compare two JSON files
- Paste the first JSON into Original and the second into Changed. You can also drop a file on a box or press Open.
- Read the list of changes. Each row shows the kind of change, the path, and the values. The list updates while you type.
- Set options if you need them: how to match arrays, which fields to ignore, and the rules for numbers and text. Options that are on show as chips under the toolbar.
Press Ctrl or Cmd and Enter to compare at once. The Sample button loads a pair that shows every kind of change. Use Copy share link to send a diff to a colleague. The link holds both documents, so share it only with people who may see them.
What it ignores and what it reports
| Case | Result |
|---|---|
{"a":1,"b":2} and {"b":2,"a":1} | Equal. Key order is ignored. |
| Pretty printed and minified text | Equal. Spaces and line breaks are ignored. |
1.0 and 1, or 1e3 and 1000 | Equal. Numbers compare by value. |
1 and "1" | Type change: number to string. |
null and a missing key | Different. The key is added or removed. |
12345678901234567890 and 12345678901234567891 | Different. Big numbers are not rounded. |
Compare JSON arrays by id
Arrays are the hard part of a JSON compare. Take two lists of three records with the ids 1, 2 and 3. In the second list the records come in another order, and record 1 has a new value. Compared by position, item 1 meets item 1, item 2 meets item 2, and so on. Every item sits in a different place, so the tool reports 6 changes.
Compared by key id, each record meets the record with the same id. The tool reports one change: $.u[id=1].v. This is the usual choice when you compare API responses. In Side by side, matched records sit on the same row, and a moved record carries a mark.
The default, Auto, looks for a field that every item has and that never repeats. It tries id, uuid, _id, key, sku, code, slug, email and name, in this order. It tells you what it chose above the result, and each array has its own choice. If the ids repeat, Auto falls back to position and shows a warning.
Ignore array order in a JSON compare
Sometimes the order of items does not matter. A list of members or tags can come back in any order. Set Arrays to Ignore order. The tool matches items that are equal, wherever they sit, at every depth. It then pairs the items that are left by the number of fields they share, so a changed item shows as changed and not as removed plus added.
You can also choose it for one array only, for example roles, and keep Auto for the rest. When a position match finds the same items in another order, the result suggests Ignore order.
Ignore fields such as timestamps
Fields like updatedAt or requestId change on every call. Add them under Options, Ignore paths, one pattern per line:
**.updatedAtskips that field at any depth.items[*].idskips the id of every item initems.$.meta.requestIdskips one exact place.
A pattern with an error shows the line number. The result tells you how many places were ignored.
Compare large JSON files
The compare runs in a background worker, so you can keep typing while it works. A Cancel button appears when a compare takes more than a moment. In our tests, two files of about 5 MB with 35,000 records each compared in under two seconds on a laptop. The result shows the time it took. Files up to 50 MB open, and the tool warns you above 25 MB. Very large files depend on your device and browser.
Your data stays in your browser
The comparison runs on your device. The page does not send what you paste to a server. You can check this yourself. Open the Network tab in your browser tools, paste two documents and press Compare. No request carries your data.
This site may count visits. That count never includes your JSON. Options you choose are saved in your browser only, so the next visit starts with the same settings. Your documents are not saved.
What this tool does not do
This tool compares JSON. It does not convert to CSV or YAML, check a schema, or fetch a URL. Paste the text or open a file. It also does not merge changes. For other free tools, see all Bingemind tools.