LocalFirstTools.com — data tools that never leave your device
No upload — everything runs on your device

JSON Diff

Compare two JSON documents structurally, ignoring key order. Nothing is uploaded.

The JSON Diff parses both documents first and compares them structurally, so reordered keys and whitespace changes produce zero differences; both documents stay in the browser tab.

Press Compare — key order and formatting are ignored

What does the JSON Diff do?

A structural JSON diff compares two documents after parsing them, so it reports what actually changed — added, removed and changed values — instead of every reordered key or reformatted line. Use it to compare API responses, config revisions or database exports where a text diff drowns you in noise.

How does the JSON Diff work?

Both panes are parsed with your browser's JSON.parse, then the two values are walked recursively. Object keys are matched by name, array items by index, and each difference is reported with its dot-notation path (like user.roles[1]) and the old and new value. Because the comparison happens on parsed values, key order, indentation and whitespace produce zero differences. Everything runs locally in this tab.

Does this upload my JSON?

No. This page never sends your input to a server — formatting, decoding and hashing all run in this tab, on this device.How that works.

Frequently asked questions

Why does this show no differences when the files look different?

Because the documents are structurally identical. RFC 8259 defines a JSON object as an unordered collection of members, so two files with the same data in a different key order or with different indentation parse to the same value — which is exactly what this tool compares.

How are array changes reported?

Array items are compared by position: item 0 against item 0, item 1 against item 1, and so on. Extra items at the end of one side show as added or removed. An item inserted at the front therefore shows as a change at every following index — the tool does not detect moves.

What does the path notation mean?

Paths use dot notation for object keys and bracket indexes for arrays: user.roles[1] is the second element of the roles array inside user. Keys that are not valid identifiers are quoted in brackets, like ["content-type"].

Is 1 different from 1.0 or "1"?

1 and 1.0 are equal — JSON.parse turns both into the same number. "1" (a string) is different from 1 (a number) and is reported as a change, because the type differs even though the text looks similar.

Is my JSON uploaded to compare it?

No. Parsing and comparison run entirely in this tab. LocalFirstTools has no server endpoint that receives the documents you paste.

Related tools

Browse alljson toolsor thefull tool directory.