Extract and apply patches to JSON documents.
This is a small library for working with changes to JSON documents. It includes a library and two command-line executables in the style of the diff(1) and patch(1) commands available on many systems.
Aeson Diff
This is a small library for working with changes to JSON documents. It includes a library and two executables in the style of diff(1) and patch(1). Patches are themselves JSON Patch documents as specified in RFC 6902.
Installing
The aeson-diff
package is written in Haskell and can be installed using the Cabal package management tool, stack, or something similar.
stack install aeson-diff
The command-line tools can then be executed using stack:
stack exec json-diff -- ....
stack exec json-patch -- ....
If you prefer to use Cabal, something like this might do the trick:
cd aeson-diff/
cabal sandbox init
cabal install --dependencies-only
cabal build
sudo mkdir -p /usr/local/bin
sudo cp dist/build/json-*/json-{diff,patch} /usr/local/bin/
Usage
Patch format
aeson-diff
supports the JSON Patch format described in RFC 6902.
json-diff command
The json-diff
command compares two JSON documents and extracts a patch describing the differences between the first document and the second.
Usage: json-diff [-T|--test-before-remove] [-o|--output OUTPUT] FROM TO
Generate a patch between two JSON documents.
Available options:
-h,--help Show this help text
-T,--test-before-remove Include a test before each remove.
-o,--output OUTPUT Write patch to file OUTPUT.
json-patch command
The json-patch
command applies a patch describing changes to be made to a JSON document.
Usage: json-patch [-o|--output OUTPUT] PATCH FROM
Generate a patch between two JSON documents.
Available options:
-h,--help Show this help text
-o,--output OUTPUT Destination for patched JSON.
PATCH Patch to apply.
FROM JSON file to patch.
aeson-diff library
The aeson-diff
library exports as single module: Data.Aeson.Diff
. This exports diff
and patch
functions which do exactly what might be expected:
diff :: Value -> Value -> Patch
examines source and target JSONValue
s and constructs a newPatch
describing the changes.patch :: Patch -> Value -> Result Value
applies the changes in aPatch
to a JSONValue
. If an error results then an exception is thrown.
For more complete information, see the documentation.