JSON Diff & Compare
Compare two JSON documents and see every difference as a structured JSON diff: added keys, removed keys and changed values, each with the path it sits at. Both documents stay in your browser; nothing is uploaded.
Frequently asked questions
How do I compare two JSON files?
Paste one document on the left and the other on the right. Both are parsed and walked key by key, and every difference is listed by its path — what was added, what was removed, and what changed value — rather than as a line-by-line text diff that reflows whenever the formatting differs.
Does the order of keys matter?
No. The comparison is structural, so the same object formatted differently, indented differently or with its keys written in another order reports no differences. That is the main advantage over diffing two JSON files as plain text, where reordering a key looks like a change.
How are arrays compared?
Items are lined up by content first, the way a line diff lines up lines, so an item inserted or removed in the middle shows as one addition or removal rather than as a change to everything after it. Where the two arrays share nothing to line up on, items are compared position by position — an item edited in place is compared with its counterpart, and two swapped items show as two changes. Order still matters: a JSON array is an ordered sequence, so if order is not meaningful in your data, sort both sides before comparing.
Can it compare deeply nested objects?
Yes. The walk is recursive to any depth and each difference is reported with its full path, so you can tell a change at data.items[3].meta.id from one at data.items[4]. Containers can be collapsed, which makes a large diff readable by letting you close the parts that match, and a container with more than 200 entries starts out collapsed so a big document stays quick to draw.
Why does it say two numbers differ when they look the same?
JSON has one numeric type, so 1 and 1.0 parse to the same value and do not differ, but 1 and "1" do — one is a number and the other a string. Values of different types are always reported as changed, which catches the field that quietly became a string somewhere upstream.
Is the data I compare uploaded anywhere?
No. The whole tool is JavaScript running in your own browser, so nothing you type or paste is sent over the network, written to a log or attached to an analytics event. You can confirm it by opening the network tab and watching it stay empty while you work.
