Generate a diff between two JSON strings.
Usage
Here's a basic example which features a deleted object, a new object, a changed object, and a deeply changed object:
import 'package:json_diff/json_diff.dart';
final left = {"a": 2, "b": 3, "c": 5, "d": {"x": 4, "y": 8}};
final right = {"b": 7, "c": 5, "d": {"x": 4, "z": 16}, "e": 11};
final differ = JsonDiffer.fromJson(left, right);
DiffNode diff = differ.diff();
print(diff.added); // => {"e": 11}
print(diff.removed); // => {"a": 2}
print(diff.changed); // => {"b": [3, 7]}
print(diff.node); // => a Map<String,DiffNode>
print(diff.node['d']); // => a DiffNode
print(diff.node['d'].added); // => {"z": 16}
print(diff.node['d'].removed); // => {"y": 8}
So that's pretty fun. So when you diff two JSON strings, you get back a DiffNode. A DiffNode is a heirarchical structure that vaguely mirrors the structure of the input JSON strings. In this example, the top-level DiffNode we got back has
- an
addedproperty, which is a Map of top-level properties that were not found inleft, and were found inright. - a
removedproperty, which is a Map of top-level properties that were found inleft, but werenotfound inright. - a
changedproperty, which is a Map of top-level properties whose values are different inleftand inright. The values in this Map are two-element Arrays. The 0th element is the old value (fromleft), and the 1st element is the new value (fromright). - a
movedproperty, which is a Map of indexes, where key is the original index of an element, and value is index in the changed list. - a
nodeproperty, a Map of the properties found in bothleftandrightthat have deep differences. The values of this Map are more DiffNodes. - a
pathproperty, which is a List of indexes, describing the path from the root where this DiffNode is operating.
Contributing
Contributions welcome! Please read the contribution guidelines.
Disclaimer
This is not an official Google product.
Libraries
- json_diff
- A library for determining the difference between two JSON objects.