Javascript JSON比较/差异?

Rol*_*ndo 17 javascript

假设我有以下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"
}
Run Code Online (Sandbox Code Playgroud)

示例函数:function(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"
}
Run Code Online (Sandbox Code Playgroud)

请注意,它使用jsonstringA作为比较的基础,因此该函数仅返回缺少的字段和jsonStringB的值.这就是"Field E"及其价值不归还的原因.

如果可能的话,最好的方法是返回一个返回包含已更改值的json对象的函数?

我做过什么:我尝试通过手动指定我要检查的字段来进行比较,但是我希望有一些东西要求我不要对"字段"进行硬编码,因为它非常低效并且每次我添加JSON B的新领域,我必须在我正在寻找的领域进行硬编码...这就是为什么我在寻找一些不那么痛苦的东西.

Pet*_*son 16

创建这样的函数并不难.只需遍历第二个对象中的每个字段,如果它不在第一个中,或者该值与第一个不同,则将该字段放在返回对象中.

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;
};
Run Code Online (Sandbox Code Playgroud)

您可以在此演示页面上看到它的运行情况.

  • OP可能想要递归到对象和数组值. (3认同)