aeson-diff: Extract and apply patches to JSON documents.

[ algorithms, bsd3, json, library, program, web ] [ Propose Tags ] [ Report a vulnerability ]

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.


[Skip to Readme]

Downloads

Versions [RSS] 0.1.1.1, 0.1.1.2, 0.1.1.3, 1.0.0.0, 1.0.0.1, 1.1.0.0, 1.1.0.2, 1.1.0.3, 1.1.0.4, 1.1.0.5, 1.1.0.7, 1.1.0.8, 1.1.0.9, 1.1.0.10, 1.1.0.11, 1.1.0.12, 1.1.0.13, 1.1.0.14, 1.1.0.15
Change log CHANGELOG.md
Dependencies aeson (>=2.0.3), aeson-diff, base (>=4.11.1 && <5), bytestring (>=0.10), edit-distance-vector, optparse-applicative, scientific, text, vector, yaml [details]
License BSD-3-Clause
Copyright (c) 2015 Thomas Sutton and others.
Author Thomas Sutton
Maintainer Janus Troelsen <ysangkok@gmail.com>
Uploaded by janus at 2026-03-12T13:43:46Z
Category JSON, Web, Algorithms
Home page https://github.com/ysangkok/aeson-diff
Source repo head: git clone https://github.com/ysangkok/aeson-diff
Reverse Dependencies 6 direct, 3 indirect [details]
Executables json-patch, json-diff
Downloads 14133 total (24 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2026-03-12 [all 1 reports]

Readme for aeson-diff-1.1.0.15

[back to package description]

Aeson Diff

Build Status Hackage Hackage-Deps

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 JSON Values and constructs a new Patch describing the changes.

  • patch :: Patch -> Value -> Result Value applies the changes in a Patch to a JSON Value. If an error results then an exception is thrown.

For more complete information, see the documentation.