node.js で json オブジェクトを比較する方法のメモ
2つの json オブジェクトが一致しているかを比較するために、以下の compare メソッドを作成しました。
module.exports = class JsonUtil {
static compare(obj1, obj2) {
if (obj1 instanceof(Array)) {
if (! (obj2 instanceof(Array))) return false;
if (obj1.length != obj2.length) return false;
for (let i = 0; i < obj1.length; i++) {
const res = JsonUtil.compare(obj1[i], obj2[i]);
if (! res) return false;
}
}
else if (obj1 instanceof(Object)) {
if (obj2 instanceof(Array) || ! (obj2 instanceof(Object))) return false;
if (Object.keys(obj1).length != Object.keys(obj2).length) return false;
for (let [key, val1] of Object.entries(obj1)) {
const val2 = obj2[key];
const res = JsonUtil.compare(val1, val2);
if (! res) return false;
}
}
else if (obj1 !== obj2) {
return false;
}
return true;
}
}
上記の compare メソッドで json の比較を行ってみます。
const JsonUtil = require('JsonUtil');
console.log(JsonUtil.compare('abc', 'abc'));
console.log(JsonUtil.compare([1, 2, 3], [1, 2, 3]));
console.log(JsonUtil.compare({"a": 1, "b": 2}, {"a": 1, "b": 2}));
console.log(JsonUtil.compare({"a": 1, "b": 2}, {"a": "1", "b": "2"}));
実行結果は以下の通り想定通りの結果となりました。
true
true
true
false