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 DiffNodeprint(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.
Contributions welcome! Please read the contribution guidelines.
This is not an official Google product.