1. ホーム
  2. javascript

[解決済み] JavascriptのJSON比較/差分?

2022-03-06 18:04:15

質問

以下の2つのjsonオブジェクトがあるとします。

JSON A:
{
"Field A":"1",
"Field B":"2",
"Field D":"Something",
"Field E":"6"
}

JSON B:
{
"Field A":"1",
"Field B":"2",
"Field C":"3",
"Field D":"Different"
}

サンプル関数です。 関数 (jsonstringA, jsonstringB)

例(JSON AとJSON Bをパラメータとして使用した場合)。

を含む新しいJSONオブジェクトを返します。

{
"Field C":"3", // because function sees jsonstringB had no "Field C"
"Field D": "Different" // sees jsonstringB had a different value for "Field D"
}

jsonstringAを比較のベースにしているので、jsonStringBのフィールドがないものと値だけを返していることに注意してください。これが、"フィールドE"とその値が返されない理由です。

変更された値を含むjsonオブジェクトを返す関数を考えるには、可能であればどのような方法があるでしょうか?

私が試したこと 私はチェックしようとしているフィールドを手動で指定して比較を行うことを試みましたが、私は私が非常に非効率的で、私がJSON Bに新しいフィールドを追加するたびに、私が探しているフィールドをハードコードする必要があるため、"Fields"をハードコードしないようにする何かが欲しいのですが...それが私がより苦痛でないものを探しています理由です。

解決方法は?

このような関数を作るのは、それほど難しいことではありません。2番目のオブジェクトの各フィールドをループして、1番目のオブジェクトに存在しないか、値が1番目と異なる場合、そのフィールドをリターンオブジェクトに入れるだけです。

var compareJSON = function(obj1, obj2) {
  var ret = {};
  for(var i in obj2) {
    if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
      ret[i] = obj2[i];
    }
  }
  return ret;
};

で実際に見ることができます。 このデモページ .