JSON Diff
Compare two JSON objects structurally — added, removed, and changed values, with key order and formatting ignored. Runs in your browser; nothing is uploaded.
A JSON diff compares two documents by their data, not their text. Unlike a plain text diff, it ignores key order and formatting, so re-ordered keys and different indentation or whitespace never count as changes. Paste your original into A and the changed version into B, press Compare, and it reports every added key, removed key, and changed value by its path. Arrays are compared position by position. It is ideal for spotting what actually changed between two API responses, config versions, or exports. Everything runs in your browser — nothing you paste is uploaded.
Frequently Asked Questions
How is a JSON diff different from a text diff?
A text diff compares two documents line by line, so any change in formatting — different indentation, a trailing comma, or keys written in a different order — shows up as a difference even when the underlying data is identical. A JSON diff instead parses both sides into real data structures and compares them semantically, so it only reports genuine differences in keys and values. That makes it far more useful for structured data. If you specifically want a line-by-line view of raw text, use the Text Diff tool instead.
Does it ignore key order and whitespace?
Yes — the JSON diff ignores key order and whitespace. Because the tool parses both inputs into data before comparing, the order in which keys appear in an object and the amount of whitespace or indentation you use make no difference to the result. Two objects with the same keys and values are treated as identical even if one is minified and the other is pretty-printed. Only real differences in the data — added keys, removed keys, or changed values — are ever reported.
How are arrays compared?
Arrays are compared by position, element by element: index 0 against index 0, index 1 against index 1, and so on. This keeps the comparison simple and predictable, but it means inserting or removing an item near the start of an array shifts every later element, so a single insertion can show up as several changes. If you reorder the items in an array, those positions will also be reported as changed. For unordered lists, keep that positional behaviour in mind when reading the results.
What do the +, − and ~ signs mean?
Each line in the results starts with a sign that tells you what kind of change it is. A green + means a key or element was added in the second document, a red − means it was removed from the first, and an amber ~ marks a changed value, shown as the old value followed by an arrow and the new value. The path before each change tells you exactly where in the structure it occurred, using dot and bracket notation from the root $.
Is my data private or uploaded?
Yes — the JSON you paste stays completely private. Both documents are parsed and compared entirely in your browser using built-in JavaScript — nothing you paste is ever sent to a server, logged, or stored. There is no account and no tracking of the data you compare, so it is safe for configuration files or API payloads you would rather not upload. Once the page has loaded it also works offline.