merkle-json
Computing the hash of JSON objects can be tricky because JSON.stringify()
does not have a guaranteed string representation of a Javascript object.
Specifically, the following are equivalent and valid outputs of JSON.stringify():
var json = "{size:{w:100,h:200}}";
var json = "{size:{h:100,w:200}}";
MerkleJson guarantees a unique hash code for any Javascript object.
In addition, MerkleJson is efficient in that it only recalculates
object hashes if the object has no Merkle hash tag. If a Merkle hash
tag is present, its value is returned as the hash value of that object.
Serialize JSON object
Unlike JSON, MerkleJson serializes objects canonically.
var obj = {
d:4,
b:2,
a:1,
c:3,
};
console.log(JSON.stringify(obj));
var mj = new MerkleJson();
console.log(mj.stringify(obj));
Compute hash of JSON object
var mj = new MerkleJson();
var hash = mj.hash({
size:{
w:100,
h:200
}
});
var hash = mj.hash({
size:{
h:200
w:100,
}
});
Do not calculate hash if merkleHash is present
var mj = new MerkleJson();
var useMerkleHash = true;
var hash = mj.hash({
any1: thing1,
any2: thing2,
any3: thing3,
}, useMerkleHash);
var hash = mj.hash({
...
merkleHash: e77b735125fec27a61c6f54b17fb6221,
}, useMerkleHash);
var useMerkleHash = false;
var hash = mj.hash({
any1: thing1,
any2: thing2,
any3: thing3,
merkleHash: e77b735125fec27a61c6f54b17fb6221,
}, useMerkleHash);