【问题标题】:How can i loop a json data to compare with another json in jquery我如何循环一个 json 数据以与 jquery 中的另一个 json 进行比较
【发布时间】:2017-11-30 12:21:08
【问题描述】:

我有两个 json 对象,

对象 1

{
    "ClassificationId": 1,
    "ClassificationSort": 40,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "XYZ",
    "ShortName": "XYZ"
}, {
    "ClassificationId": 2,
    "ClassificationSort": 45,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "ABC",
    "ShortName": "ABC"
}, {
    "ClassificationId": 3,
    "ClassificationSort": 50,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "DEF",
    "ShortName": "DEF"
}

对象 2

{
    "ClassificationId": 1,
    "ClassificationSort": 40,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "XYZ_1",
    "ShortName": "XYZ"
}, {
    "ClassificationId": 2,
    "ClassificationSort": 45,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "ABC_1",
    "ShortName": "ABC"
}, {
    "ClassificationId": 3,
    "ClassificationSort": 50,
    "ClassificationType": 146,
    "IsActive": true,
    "Level": 0,
    "LongName": "DEF_1",
    "ShortName": "DEF"
}

我想比较两个objects 以找出哪个key 发生了变化。我需要更改后的keyvalue

请参阅下面的 sn-p,了解到目前为止我尝试过的内容。但是它没有按预期工作。

 var result = JSON.parse(json1);
        var result2 = JSON.parse(json2);
        

        $.each(result, function (k, v) {

            var key1 = k;
            var value1 = v;
            $.each(result2, function (k2, v2) {
                if (key1 == k2) {
                    if (value1 != v2)
                        //console.log("key:" + k2 + "value:" + v2);
                        changeData = "[{\"ChangedColumn\":\"" + key1 + "\",\"ChangedValueOld\":\"" + value1 + "\",\"ChangedValueNew\":\"" + v2 + "\",\"RowIdentifierValue\":\"140\"}],";
                    //console.log(changeData);
                    return false;
                }

            });

        });
        

任何帮助将不胜感激。

【问题讨论】:

  • 您附加的 json 语法无效。在这里查看 - json.parser.online.fr
  • 在其对象数组周围添加方括号@ŁukaszTrzewik
  • 如果@Sarat 使用他在这里给出的方式,那可能是问题!
  • “未按预期工作” ...更具体。有什么错误吗?预期的结果是什么?也永远不要手动创建 json。它容易出错,而且工作量远远超过需要

标签: jquery json


【解决方案1】:

您只需遍历 JSON 数组并比较每个键值。有几种方法可以做到这一点,但我提供了一种简单易懂的方法来实现这一点。

这是你的 JSON 数组:

var json1 = [{"ClassificationId":1,"ClassificationSort":40,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"XYZ","ShortName":"XYZ"},{"ClassificationId":2,"ClassificationSort":45,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"ABC","ShortName":"ABC"},{"ClassificationId":3,"ClassificationSort":50,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"DEF","ShortName":"DEF"}];

var json2 = [{"ClassificationId":1,"ClassificationSort":40,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"XYZ_1","ShortName":"XYZ"},{"ClassificationId":2,"ClassificationSort":45,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"ABC_1","ShortName":"ABC"},{"ClassificationId":3,"ClassificationSort":50,"ClassificationType":146,"IsActive":true,"Level":0,"LongName":"DEF_1","ShortName":"DEF"}];

这里是 javascript 代码,它将为您提供打印在浏览器控制台中的差异数组:

var keys = Object.keys(json1[0]);

var changeArray = [];

for(var j=0; j<json1.length; j++){
    var json1Inner = json1[j];
    var json2Inner = json2[j];

    for(var i=0; i<keys.length; i++){
      var key = keys[i], changeTrack = {};
      if(json1Inner[key] !== json2Inner[key]){
         changeTrack['ChangedColumn'] = key;
         changeTrack['ChangedValueOld'] = json1Inner[key];
         changeTrack['ChangedValueNew'] = json2Inner[key];
         changeTrack['RowIdentifierValue'] = '140';

         changeArray.push(changeTrack);
      }
    }
}


console.log(changeArray);

为简单起见,这里是JSFIDDLE

【讨论】:

  • @AKA...非常感谢您的帮助...它成功了...请您帮忙在此处获取作为 RowIdentifierValue 的 ClassificationId
  • 如果你需要 json1 的 ClassificationId 然后使用 changeTrack['RowIdentifierValue'] = json1Inner['ClassificationId'] 或者如果你需要 json2 然后使用 changeTrack['RowIdentifierValue'] = json2Inner['ClassificationId' ]
  • @AKA....我怎样才能概括这个.....而不是提到分类 id 我怎样才能得到第一个键值的值
猜你喜欢
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多