It's a useful tool to generate and apply json patch (based on RFC6902).
For example, you can keep two json (between server and client) in sync by sending its diff (which is smaller than the json itself) through web to keep it fast.
import { JsonPatch } from "https://deno.land/x/[email protected]/mod.ts";
const jPatch = new JsonPatch();
const from = { status: "waiting" },
to = { status: "ready", data: ["1024", true] };
const patch = jPatch.diff(from, to); // generate patch
// The patch is like the diff between "from" and "to".
// You can apply the patch to "form" to patch it to become "to".
import { JsonPatch } from "https://deno.land/x/[email protected]/mod.ts";
const jPatch = new JsonPatch();
const from = { status: "waiting" },
to = { status: "ready", data: ["1024", true] };
const patch = jPatch.diff(from, to); // generate patch
const result = jPatch.patch(from, patch);
// "result" should be identical to "to".
json_patch comes with a tool to handle json pointer as well. You can get the location in json specified by a JSON Pointer based on RFC6901.
import { JsonPointer } from "https://deno.land/x/[email protected]/mod.ts";
const jPointer = new JsonPointer();
const json = { arr: [12, [true, null]], str: "a string" };
const pointer = "/arr/1/0";
jPointer.apply(json, pointer) === true; // get the specified value
A patch is just an array of "operation". Each operation has a type of "add", "remove", "copy", etc. An "add" operation, for example, will add some value at a location (specified by a JSON Pointer, refer to RFC6901) in a JSON Object.
When applying a patch to a JSON Object, each operation is performed in sequence.
You can refer to RFC6902 for more info.