Tool

JSON structural diff tool

Compare two JSON documents by structure, not line order — reordered keys and reformatting never count as differences. See added, removed and changed fields as a path list or side by side, all in your browser.

Input

Processing: parsing and comparison run entirely in this browser tab — your JSON is never sent, stored or written into links. Closing the tab discards it.

0 / 600,000

0 / 600,000

Options

How the comparison works

This tool compares two JSON documents structurally, not line by line: object key order, indentation and whitespace never count as differences. Every leaf field is walked once and reported at its real path — $.data.models[0].price — so a reformatted file still produces a clean, minimal diff.

Parsing is forgiving where developers actually need it: trailing commas before } or ] are tolerated and reported, and syntax errors point to the exact line and column. Duplicate keys are counted as a note (the last value wins, like JSON.parse). With Ignore array order on, array elements match as multisets — reordering is free, while genuinely missing or extra elements still show up. Ignore case and empty-value differences treats "", null and a missing key as equivalent, and folds letter case in strings.

The export copies a real RFC 6902 JSON Patch (add/remove/replace on JSON Pointer paths) or a Markdown table you can paste straight into a PR description or API doc. Everything runs in this tab — nothing is uploaded.

FAQ

How is this different from a text diff?

A text diff compares lines, so reformatting or reordering keys produces noise. This tool parses both documents and compares them field by field — key order, indentation and whitespace never count as changes. You see the real path of every difference, like $.data.models[0].price.

Is invalid JSON rejected?

Syntax errors are reported with the exact line and column. Trailing commas before } or ] are tolerated and counted as a note — everything else strict JSON.parse rejects is rejected here too. Duplicate keys are flagged; the last value wins.

What does 'Ignore array order' actually compare?

Elements are matched as multisets by their canonical structure: reordering the same elements reports nothing, while genuinely added or missing elements still show up at their indexes. Elements that only moved are marked with their new index.

Is my JSON uploaded or stored?

No. Parsing, comparing and rendering all run inside this browser tab — nothing is sent to any server, stored, or written into a URL. Closing the tab discards it.