JSON Structural Diff Checker
Find changed values rather than formatting-only differences between two JSON documents. Compare nested objects and arrays, inspect additions and removals and export a report that identifies each location unambiguously.
Browser-based · No account required · Copy and export
Workspace
Ready to useHow to use JSON Structural Diff Checker
- Paste valid JSON into both fields. Object-key order alone does not count as a difference.
- Choose whether primitive arrays should be treated as unordered multisets. Compare or swap the two documents.
- Read the text report, or download JSON records with type, display location and JSON Pointer path.
When to use this tool
Compare API responses or configuration revisions by data structure rather than formatting. Inspect JSON Pointer paths in the report before deciding which differences to keep.
A structural report is not a text diff or JSON Patch
An added key, removed key or changed value becomes a difference record. Array order normally matters; the unordered option only applies to arrays made of primitive values and still counts duplicates. JSON Pointer escapes a slash in a key as ~1 and a tilde as ~0. Exported records are a review format, not instructions claiming conformance to RFC 6902 JSON Patch.
Worked example
Left: {"a.b":1}
Right: {"a.b":2}
Display location: $["a.b"]
JSON Pointer: /a.b
This is different from nested {"a":{"b":2}}. Separate a type change from an irrelevant tag order
Original comparison inputs
Left: {"quantity":2,"tags":["draft","review"]}
Right: {"quantity":"2","tags":["review","draft"]} - Paste each JSON value into its own comparison field. Compare with unordered primitive arrays off first; both the quantity type and tag order matter in this view.
- If tags are genuinely unordered for your application, enable that option and compare again. The reordered tags can then compare equal, but number
2and string"2"remain different. - Inspect the reported locations and before/after values. Do not use the unordered option for arrays whose order is meaningful or expect it to identify matching objects by an ID field.
- Copy or download the comparison report for review. It is not an executable JSON Patch, and the tool does not apply changes back to either input.
Duplicate counts still matter in primitive arrays: two occurrences do not become one merely because order is ignored. Object-key order and indentation are already ignored by structural comparison.
These are authored inputs with expected comparison rules, not a new generated report. Use JSON Schema Validator for required types/properties, or Text Diff when source formatting is part of the change.
Limits and output checks
JSON must fit the shared text and safe-number limits. Nesting is bounded for recursive comparison. Large integer identifiers should be quoted. The unordered primitive-array option does not reorder arrays of objects or infer object identities.
Reference: JSON Pointer syntax.
Frequently asked questions
Do different indentation or key orders count?
No. Parsed values are compared structurally; insignificant JSON source formatting and object-key ordering are ignored.
Does unordered mean duplicates are ignored?
No. Primitive-array multiplicity remains meaningful. [1,1] differs from [1].
Can I apply the JSON report as a patch?
No. It is an explicit comparison report with JSON Pointer locations, not a standardized JSON Patch operation list.
Compare JSON values instead of indentation
Supply two valid JSON values and review changes at their reported locations. Choose the primitive-array option only when order is irrelevant to that data.
Scope of this workflow
Object-key order and whitespace are ignored, while duplicate primitive values remain meaningful. The result is a report, not a standardized JSON Patch.
Text Diff Checker — Compare Lines or Words · All developer tools · Privacy policy · Contact PixelOkay