Generate a diff between two JSON strings.
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
added
property, which is a Map of top-level properties that were not found inleft
, and were found inright
. - a
removed
property, which is a Map of top-level properties that were found inleft
, but werenot
found inright
. - a
changed
property, which is a Map of top-level properties whose values are different inleft
and 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
moved
property, which is a Map of indexes, where key is the original index of an element, and value is index in the changed list. - a
node
property, a Map of the properties found in bothleft
andright
that have deep differences. The values of this Map are more DiffNodes. - a
path
property, which is a List of indexes, describing the path from the root where this DiffNode is operating.
Contributions welcome! Please read the contribution guidelines.
This is not an official Google product.