๐Ÿ›ก๏ธ Safe Web Utils

โš–๏ธ

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.

Secure Client-Side

We'll filter these out before comparing.

Original (Expected)
Modified (Actual)

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:

1๏ธโƒฃ Filter

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.

2๏ธโƒฃ Canonize

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].

3๏ธโƒฃ Diff

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.

hash('{"a":1, "b":2}')
= 0x9a3f...
hash('{"b":2, "a":1}')
= 0x1b7c... (Mismatch!)

Need to clean the data first?

Explore More Tools