This project is maintained thanks to your contributions! Please send pull requests.
I will merge any pull request that adds something useful, does not break existing things, has reasonable code quality and provides/updates tests where appropriate.
Anyone who gets a significant pull request merged gets commit access to the repository.
Usage
Simple:
json-diff a.json b.json
Detailed:
% json-diff --help
Usage: json-diff [-vCjfonskKp] first.json second.json
Arguments:
<first.json> Old file
<second.json> New file
General options:
-v, --verbose Output progress info
-C, --[no-]color Colored output
-j, --raw-json Display raw JSON encoding of the diff
-f, --full Include the equal sections of the document, not just the deltas
--max-elisions COUNT Max number of ...'s to show in a row in "deltas" mode (before
collapsing them)
-o, --output-keys KEYS Always print this comma separated keys, with their value, if they are
part of an object with any diff
-n, --output-new-only Output only the updated and new key/value pairs (without marking them as
such). If you need only the diffs from the old file, just exchange the
first and second json.
-s, --sort Sort primitive values in arrays before comparing
-k, --keys-only Compare only the keys, ignore the differences in values
-K, --keep-unchanged-values Instead of omitting values that are equal, output them as they are
-p, --precision DECIMALS Round all floating point numbers to this number of decimal places prior
to comparison
-h, --help Display this usage information
[email protected] test
coffee -c test; mocha test/*.js
colorizeToArray
✔ should return ' <value>' for a scalar value
✔ should return ' <value>' for 'null' value
✔ should return ' <value>' for 'false' value
✔ should return '-<old value>', '+<new value>' for a scalar diff
✔ should return '-<old value>', '+<new value>' for 'null' and 'false' diff
✔ should return '-<removed key>: <removed value>' for an object diff with a removed key
✔ should return '+<added key>: <added value>' for an object diff with an added key
✔ should return '+<added key>: <added value>' for an object diff with an added key with 'null' value
✔ should return '+<added key>: <added value>' for an object diff with an added key with 'false' value
✔ should return '+<added key>: <added stringified value>' for an object diff with an added key and a non-scalar value
✔ should return ' <modified key>: <colorized diff>' for an object diff with a modified key
✔ should return '+<inserted item>' for an array diff
✔ should return '-<deleted item>' for an array diff
✔ should handle an array diff with subobject diff
colorize
✔ should return a string with ANSI escapes
✔ should return a string without ANSI escapes on { color: false }
diff
with simple scalar values
✔ should return undefined for two identical numbers
✔ should return undefined for two identical strings
✔ should return { __old: <old value>, __new: <new value> } object for two different numbers
with objects
✔ should return undefined for two empty objects
✔ should return undefined for two objects with identical contents
✔ should return undefined for two object hierarchies with identical contents
✔ should return { <key>__deleted: <old value> } when the second object is missing a key
✔ should return { <key>__added: <new value> } when the first object is missing a key
✔ should return { <key>: { __old: <old value>, __new: <new value> } } for two objects with different scalar values for a key
✔ should return { <key>: <diff> } with a recursive diff for two objects with different values for a key
with arrays of scalars
✔ should return undefined for two arrays with identical contents
✔ should return [..., ['-', <removed item>], ...] for two arrays when the second array is missing a value
✔ should return [..., ['+', <added item>], ...] for two arrays when the second one has an extra value
✔ should return [..., ['+', <added item>]] for two arrays when the second one has an extra value at the end (edge case test)
with arrays of objects
✔ should return undefined for two arrays with identical contents
✔ should return undefined for two arrays with identical, empty object contents
✔ should return undefined for two arrays with identical, empty array contents
✔ should return undefined for two arrays with identical array contents including 'null'
✔ should return undefined for two arrays with identical, repeated contents
✔ should return [..., ['-', <removed item>], ...] for two arrays when the second array is missing a value
✔ should return [..., ['+', <added item>], ...] for two arrays when the second array has an extra value
✔ should return [['+', <added item>], ..., ['+', <added item>]] for two arrays containing objects of 3 or more properties when the second array has extra values (fixes issue #57)
✔ should return [..., ['+', <added item>], ...] for two arrays when the second array has a new but nearly identical object added
✔ should return [..., ['~', <diff>], ...] for two arrays when an item has been modified
diff({full: true})
with simple scalar values
✔ should return the number for two identical numbers
✔ should return the string for two identical strings
✔ should return { __old: <old value>, __new: <new value> } object for two different numbers
with objects
✔ should return an empty object for two empty objects
✔ should return the object for two objects with identical contents
✔ should return the object for two object hierarchies with identical contents
✔ should return { <key>__deleted: <old value>, <remaining properties>} when the second object is missing a key
✔ should return { <key>__added: <new value>, <remaining properties> } when the first object is missing a key
✔ should return { <key>: { __old: <old value>, __new: <new value> } } for two objects with different scalar values for a key
✔ should return { <key>: <diff>, <equal properties> } with a recursive diff for two objects with different values for a key
✔ should return { <key>: <diff>, <equal properties> } with a recursive diff for two objects with different values for a key
with arrays of scalars
✔ should return an array showing no changes for any element for two arrays with identical contents
✔ should return [[' ', <unchanged item>], ['-', <removed item>], [' ', <unchanged item>]] for two arrays when the second array is missing a value
✔ should return [' ', <unchanged item>], ['+', <added item>], [' ', <unchanged item>]] for two arrays when the second one has an extra value
✔ should return [' ', <unchanged item>s], ['+', <added item>]] for two arrays when the second one has an extra value at the end (edge case test)
with arrays of objects
✔ should return an array of unchanged elements for two arrays with identical contents
✔ should return an array with an unchanged element for two arrays with identical, empty object contents
✔ should return an array with an unchanged element for two arrays with identical, empty array contents
✔ should return an array of unchanged elements for two arrays with identical array contents including 'null'
✔ should return an array of unchanged elements for two arrays with identical, repeated contents
✔ should return [[' ', <unchanged item>], ['-', <removed item>], [' ', <unchanged item>]] for two arrays when the second array is missing a value
✔ should return [[' ', <unchanged item>], ['+', <added item>], [' ', <unchanged item>]] for two arrays when the second array has an extra value
✔ should return [[' ', <unchanged item>], ['+', <added item>], [' ', <unchanged item>]] for two arrays when the second array has a new but nearly identical object added
✔ should return [[' ', <unchanged item>], ['~', <diff>], [' ', <unchanged item>]] for two arrays when an item has been modified
diff({keysOnly: true})
with simple scalar values
✔ should return undefined for two identical numbers
✔ should return undefined for two identical strings
✔ should return undefined object for two different numbers
with objects
✔ should return undefined for two empty objects
✔ should return undefined for two objects with identical contents
✔ should return undefined for two object hierarchies with identical contents
✔ should return { <key>__deleted: <old value> } when the second object is missing a key
✔ should return { <key>__added: <new value> } when the first object is missing a key
✔ should return undefined for two objects with different scalar values for a key
✔ should return undefined with a recursive diff for two objects with different values for a key
✔ should return { <key>: <diff> } with a recursive diff when second object is missing a key and two objects with different values for a key
with arrays of scalars
✔ should return undefined for two arrays with identical contents
✔ should return undefined for two arrays with when an item has been modified
✔ should return [..., ['-', <removed item>], ...] for two arrays when the second array is missing a value
✔ should return [..., ['+', <added item>], ...] for two arrays when the second one has an extra value
✔ should return [..., ['+', <added item>]] for two arrays when the second one has an extra value at the end (edge case test)
with arrays of objects
✔ should return undefined for two arrays with identical contents
✔ should return undefined for two arrays with identical, empty object contents
✔ should return undefined for two arrays with identical, empty array contents
✔ should return undefined for two arrays with identical, repeated contents
✔ should return [..., ['-', <removed item>], ...] for two arrays when the second array is missing a value
✔ should return [..., ['+', <added item>], ...] for two arrays when the second array has an extra value
✔ should return [..., ['~', <diff>], ...] for two arrays when an item has been modified
diffString
✔ should produce the expected result for the example JSON files
✔ should produce the expected colored result for the example JSON files
✔ return an empty string when no diff found
90 passing (42ms)
Change Log
0.9.0 Add --output-new-only option
0.8.0 Add --keep-unchanged-values option
0.7.4 Fix bug #76
0.7.3 Revert use of ?? operator in 0.7.2 (which caused a breaking change)
0.7.2 Add --maxElisions and --precision options.
0.7.1 Add --output-keys option.
0.7.0 Add --sort option.
0.6.3 Fix ticket #68.
0.6.2 Provide examples of setting mode from code.
0.6.1 Return exit code 0. Update cli-color to the latest version.
请发表评论