JSON Diff
Runs in your browserIt compares the data, not the text — so reformatting and reordered keys don't count.
Document A
Document B
2 added, 3 changed
- ~$.name"Widget" "Widget Pro"
- ~$.price19.99 24.99
- +$.tags[2]= "pro"
- ~$.inStocktrue false
- +$.discontinued= false
How the structural diff works
ToolJar parses both documents and walks them together: object properties are matched by key regardless of order, and array elements are compared by position (index 0 against index 0, and so on). A property that exists only in A is reported as removed, one that exists only in B as added, and a value present in both but different — including a type change, like a string becoming an object — as changed. Because arrays are compared by index, inserting an element at the start of an array will show every following element as changed rather than being detected as a shift; this is a deliberate trade-off for a diff that's easy to reason about.
Questions
- Does key order matter?
- No, and that's the point. Objects are matched up by key, so shuffling properties around without changing any values gives you an empty diff — which is exactly what a line-based diff gets wrong.
- What about arrays?
- Arrays are matched up by position — index 0 against index 0, and so on. That keeps the results predictable, but it does mean inserting an item at the front shows every element after it as changed, rather than as one insertion. Worth knowing before you read a long array diff.