关于javascript:比较2个JSON对象

Compare 2 JSON objects

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Object comparison in JavaScript

是否有任何方法接受2个JSON对象并比较2以查看是否有任何数据发生了更改?

编辑

审查意见后,需要澄清。

  • JSON对象定义为


    "an unordered set of name/value pairs.
    An object begins with { (left brace)
    and ends with } (right brace). Each
    name is followed by : (colon) and the
    name/value pairs are separated by ,
    (comma)." -- json.org

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

  • 我不是javascript专家,所以如果在javascript中,这些是对象文本,那么我想这就是我应该称之为它们的地方。

    我相信我正在寻找的方法能够:

  • 深度递归以查找唯一的名称/值对
  • 确定两个对象文本的长度,并比较名称/值对,以查看两者是否存在差异。

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

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

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    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))
       ...