Find JSON Differences Online
Paste two JSON payloads and find differences by path, including added keys, removed keys, and changed values.
Paste your JSON → Get results instantly (no signup)
→ Compare these JSON inputs and return a report of changed, added, and removed fi...
1{2 "changed": [3 {4 "kind": "changed",5 "path": "plan",6 "before": "starter",7 "after": "pro"8 },9 {10 "kind": "changed",11 "path": "features.aiDraft",12 "before": false,13 "after": true14 },15 {16 "kind": "changed",17 "path": "limits.documents",18 "before": 10,19 "after": 10020 }21 ],22 "added": [23 {24 "kind": "added",25 "path": "features.apiAccess",26 "value": true27 }28 ],29 "removed": [30 {31 "kind": "removed",32 "path": "features.legacyExport",33 "value": true34 }35 ]36}Love the result?
Use this exact pipeline in your app, backend, or LLM workflow.
No setup needed. Works with curl, Node, Python.
Uses example data. For edited input, copy from the playground.
Works with:
- Changed field reports
- Nested JSON paths
- Release QA
- Debugging payload drift
Example: input → output
JSON difference checker
A JSON difference checker helps you find the exact data-level changes between two JSON inputs. It is built for moments where "these payloads are different" is not enough. You need to know which field changed, whether a key was removed, and whether a new nested value appeared.
This page focuses on changed-field reporting. Paste two payloads, run the checker, and inspect the output by path. The report is easier to review than a raw line diff because JSON is parsed as data before the comparison happens.
For the main comparison page and shared engine, open the structured JSON diff.
What counts as a JSON difference?
The most common difference types are added fields, removed fields, and changed values. An added field means the new payload contains a path that did not exist in the baseline. A removed field means the baseline had a path that the new payload no longer includes. A changed value means both payloads contain the same path but the value is different.
Nested JSON makes those categories more valuable. If a deeply nested response changes from "status":"trial" to "status":"active", a structured checker can identify the path directly instead of forcing the reviewer to search through the whole document.
Difference checking for debugging
Use this workflow when an API changed unexpectedly, a config stopped matching production, a test fixture drifted, or an exported file no longer matches a known-good snapshot. It is especially helpful for regression checks because the report separates shape changes from formatting changes.
Before running the checker, make both sides valid JSON with JSON Validator. If unwanted nulls or blank strings create noise, clean both payloads with Clean JSON. If you only care about selected paths, use Extract Fields from JSON before comparing.
Difference checker vs text diff
Text diff is line oriented. It can be perfect for source code and plain text, but it can exaggerate JSON changes when indentation, key order, or formatting changes. A JSON difference checker is path oriented. It is better when consumers care about field names, values, and nested structure.
Array order is the main caveat. If an array is reordered, an index-based report may show many changes. In that case, normalize or sort records by an identifier first, then run the checker again.
Related conversions
- JSON Diff Tool - canonical structured diff workflow for added, removed, and changed fields.
- JSON compare tool online - compare objects, arrays, files, and API payloads by path.
- Compare JSON files online - file-focused comparison for fixtures, configs, and exports.
- JSON diff online - browser-based no-upload JSON comparison.
- API JSON diff - compare endpoint, webhook, and SDK response changes.
- Compare JSON objects - object-level field comparison.
- JSON file diff - saved-file and fixture diff workflow.
- Find JSON changes - added, removed, and modified field detection.
- Compare API JSON responses - endpoint and webhook response comparison.
Related tools
- JSON Validator - validate both inputs before checking differences.
- JSON Formatter - clean and format JSON before checking differences.
- Clean JSON - remove whitespace, nulls, and cleanup noise before review.
- Flatten JSON - make deeply nested difference paths easier to scan.
- Extract Fields from JSON - compare only the paths that matter.
- JSON Schema Validator - confirm the changed payload still matches required structure.
Related tools
- JSON ValidatorCheck JSON syntax before comparing two files or API responses
- JSON FormatterClean and format JSON before diffing, validation, or conversion
- JSON to CSVConvert JSON array row data into final CSV text output
- Clean ValuesClean noisy JSON by removing nulls, empties, duplicates, and other low-value clutter
- Flatten / NestConvert nested JSON objects, arrays, and API responses into flat key paths or rebuild them using delimiter and casing rules
Related comparisons
Read more on the blog
Advanced usage (optional)
JSON Diff / Change Report
v1.0.0Description
JSON Diff / Change Report
Compare two JSON inputs and output a structured report or focused diff subset. Accepts a primary input (the new JSON) and secondary input (the old JSON), then shows what changed, was added, or was removed between them.
How It Works
This utility requires two inputs — primary (the "new" version) and secondary (the "old" version). It performs a deep comparison and outputs results based on the selected mode.
Diff Modes
Report
Return a structured report with changed, added, and removed arrays. Entries include dot paths, kind, and either before/after values or the added/removed value.
Changed Only
Return the subset of the new JSON that differs from the old JSON. Modified and added fields are included; removed fields are excluded because they do not exist in the new JSON.
Added Only
Show only fields that exist in the primary input but not in the secondary. Useful for detecting new additions.
Removed Only
Show only fields that exist in the secondary input but not in the primary. Useful for detecting deletions.
Full Annotated
Show all fields with _diff_ markers indicating their status: "unchanged", "changed", "added", or "removed". Provides a complete picture of all differences.
Configuration
| Field | Type | Default | Description |
|---|---|---|---|
| Diff Mode | enum | report | report, changed-only, added-only, removed-only, or full-annotated |
Use Cases
Version Comparison
- Config changes: Compare two versions of a configuration file to see what changed
- API responses: Diff API responses before and after a deployment
- Schema evolution: Identify added or removed fields between schema versions
Data Validation
- Migration verification: Compare source and target data after migration
- Sync detection: Find out-of-sync records between two data sources
- Audit trail: Track exactly which fields were modified in an update
Debugging
- State inspection: Compare application state before and after an action
- Response diffing: Compare expected vs. actual API responses
- Regression detection: Identify unexpected changes in output data
Configuration
| Name | Type | Default | Description |
|---|---|---|---|
| Diff Mode | enum | report | report: return changed, added, and removed entries with paths. changed-only: show the new JSON subset with modified and added values. added-only: show only new keys. removed-only: show only deleted keys. full-annotated: show all with _diff markers.
report changed-only added-only removed-only full-annotated |
Examples
Compare these JSON inputs and return a report of changed, added, and removed fields.1{2 "changed": [3 {4 "kind": "changed",5 "path": "plan",6 "before": "starter",7 "after": "pro"8 },9 {10 "kind": "changed",11 "path": "features.aiDraft",12 "before": false,13 "after": true14 },15 {16 "kind": "changed",17 "path": "limits.documents",18 "before": 10,19 "after": 10020 }21 ],22 "added": [23 {24 "kind": "added",25 "path": "features.apiAccess",26 "value": true27 }28 ],29 "removed": [30 {31 "kind": "removed",32 "path": "features.legacyExport",33 "value": true34 }35 ]36}API Usage
curl -X POST https://your-domain.com/api/v1/utilities/compare.json-diff \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"inputs":{"primary":{"plan":"pro","features":{"aiDraft":true,"history":true,"apiAccess":true},"limits":{"documents":100}},"secondary":{"plan":"starter","features":{"aiDraft":false,"history":true,"legacyExport":true},"limits":{"documents":10}}},"config":{"mode":"report"}}'1{2 "changed": [3 {4 "kind": "changed",5 "path": "plan",6 "before": "starter",7 "after": "pro"8 },9 {10 "kind": "changed",11 "path": "features.aiDraft",12 "before": false,13 "after": true14 },15 {16 "kind": "changed",17 "path": "limits.documents",18 "before": 10,19 "after": 10020 }21 ],22 "added": [23 {24 "kind": "added",25 "path": "features.apiAccess",26 "value": true27 }28 ],29 "removed": [30 {31 "kind": "removed",32 "path": "features.legacyExport",33 "value": true34 }35 ]36}