比较2个JSON对象

时间:2010-12-16 20:49:44

标签: javascript json compare

  

可能重复:
  Object comparison in JavaScript

是否有任何方法可以接收2个JSON对象并比较2以查看是否有任何数据发生了变化?

修改

在审核评论后,需要做一些澄清。

  1. JSON对象定义为

      

    “一组无序的名称/值对。   对象以{(左括号)开头   并以}结尾(右支撑)。每   名称后跟:(冒号)和   名称/值对分隔开,   (逗号)。“ - json.org

  2. 我的目标是能够比较2个JSON对象文字,简单地说。

  3. 我不是javascript大师所以如果在javascript中这些是对象文字,那么我想这就是我应该称之为的。

    我相信我所寻找的是一种能够:

    的方法
    1. 深度递归以查找唯一的名称/值对
    2. 确定两个对象文字的长度,并比较名称/值对,以查看是否存在差异。

1 个答案:

答案 0 :(得分:14)

仅仅解析JSON并比较两个对象是不够的,因为 它不会是完全相同的对象引用(但可能是相同的值)。

你需要做一个深刻的平等。

来自http://threebit.net/mail-archive/rails-spinoffs/msg06156.html - 这似乎是使用jQuery。

Object.extend(Object, {
   deepEquals: function(o1, o2) {
     var k1 = Object.keys(o1).sort();
     var k2 = Object.keys(o2).sort();
     if (k1.length != k2.length) return false;
     return k1.zip(k2, function(keyPair) {
       if(typeof o1[keyPair[0]] == typeof o2[keyPair[1]] == "object"){
         return deepEquals(o1[keyPair[0]], o2[keyPair[1]])
       } else {
         return o1[keyPair[0]] == o2[keyPair[1]];
       }
     }).all();
   }
});

Usage:

var anObj = JSON.parse(jsonString1);
var anotherObj= JSON.parse(jsonString2);

if (Object.deepEquals(anObj, anotherObj))
   ...