Smart JSON Diff for API Developers
Stop debugging false positives. This tool performs a Semantic Comparison rather than a simple text diff. It allows you to Ignore unstable keys (like autogenerated IDs, timestamps, or random hashes) and normalize unordered lists. Perfect for Regression Testing, Migration Audits, and verifying Golden Master payloads where data order is non-deterministic.
We'll filter these out before comparing.
Stop debugging "Fake" Errors
Standard diff tools mark files as different if the lines don't match exactly. But in API testing, Standard diff tools mark files as different if the lines don't match exactly. But in API testing, order doesn't always matter and IDs/Timestamps change.
โ Standard Diff
Shows 50 errors because id changed from 101 to 102.
โ Smart Diff
Shows "Match" because we ignored id.
How the "Smart Engine" Works
Unlike text comparators (like `git diff`) which compare line-by-line, this tool understands JSON Semantics. It runs a 3-step normalization pipeline before comparing:
Recursive Strip
We walk the entire JSON tree and remove any key in your "Ignore List" (e.g., id, timestamp), even if nested 10 levels deep.
Semantic Sort
If you check "Ignore Order", we detect arrays of objects and sort them by a stable hash (like id or content), converting [B, A] to [A, B].
Deep Equality
Finally, we run a deep object comparison. Since noise (time/order) is removed, any remaining difference is a REAL bug.
Killer Use Cases
๐ API Migrations
Moving from Python to Go? Or REST to GraphQL?
"The response should be identical except for `server_time`."
-> Use this tool to prove parity.
๐งช Regression Testing
Compare prod output vs staging.
"I refactored the User Class. Did I break the JSON structure?"
-> Check Staging vs Prod JSON here.
Pro Tip: Why Hashing Fails
Ever tried to generate a checksum (MD5/SHA) of a JSON object? It's a nightmare because
{"a":1, "b":2} produces a different hash than {"b":2, "a":1}.
๐ Deterministic Canonicalization
This tool essentially performs "Canonicalization" (RFC 8785). It standardizes the structure so you can compare semantics, not just bytes. This is exactly how Redis Caching keys and JWT Signatures work.
= 0x9a3f...
= 0x1b7c... (Mismatch!)