2016-05-10 14 views
0

私は、階層構造を持つ2つのオブジェクトJSONを持っています。 JSONの行セット内の各オブジェクトを比較する必要があります。そして、どこで値が等しくないgettng 次に、私は対応するオブジェクトに1つのフラグを追加する必要があります。AngularJsを使用して2つのオブジェクトJSONを比較するにはどうすればよいですか?

私のJSONを見て、解決策を教えてください。少なくとも角度のない場合は、私はJavascriptで達成する必要があります。事前に

おかげで...

JSON1

{"entityinfo":{"entity":"Customer29Jan16","tenantid":"292FEC76-5F1C-486F-85A5-09D88096F098","timestamp":"2015-12-15T10:16:06.322Z"},"collections":{"Customer29Jan16":{"rowset":[{"CuId":"123","Name":"Ranjini","Quantity":"60","Rate":"60","Amount":"3600"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]},"Customer29Jan16Obj":{"rowset":[{"CuObjId":"456","FullAddress":"Electronic City","ObjAddr":"Bangalore","ObjName":"Testing"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]}}} 

JSON2

{"entityinfo":{"entity":"Customer29Jan16","tenantid":"292FEC76-5F1C-486F-85A5-09D88096F098","timestamp":"2015-12-15T10:16:06.322Z"},"collections":{"Customer29Jan16":{"rowset":[{"CuId":"123","Name":"Vijay","Quantity":"60","Rate":"60","Amount":"3600"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]},"Customer29Jan16Obj":{"rowset":[{"CuObjId":"456","FullAddress":"SilkBoard","ObjAddr":"Bangalore","ObjName":"Testing"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]}}} 
+0

あなたは、対応するオブジェクトにフラグを追加することによって何を意味するのですか? –

+1

2つのオブジェクトを 'angular.equals(obj1、obj2);'で比較できます。 – Arg0n

+0

[角でオブジェクトを比較]の複製があります(http://stackoverflow.com/questions/20409712/compare-objects-in-angular) – JrBenito

答えて

2

。あなたはそれを再生することができますhere

はJavaScript

var json1 = {"entityinfo":{"entity":"Customer29Jan16","tenantid":"292FEC76-5F1C-486F-85A5-09D88096F098","timestamp":"2015-12-15T10:16:06.322Z"},"collections":{"Customer29Jan16":{"rowset":[{"CuId":"123","Name":"Ranjini","Quantity":"60","Rate":"60","Amount":"3600"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]},"Customer29Jan16Obj":{"rowset":[{"CuObjId":"456","FullAddress":"Electronic City","ObjAddr":"Bangalore","ObjName":"Testing"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]}}}; 

var json2 = {"entityinfo":{"entity":"Customer29Jan16","tenantid":"292FEC76-5F1C-486F-85A5-09D88096F098","timestamp":"2015-12-15T10:16:06.322Z"},"collections":{"Customer29Jan16":{"rowset":[{"CuId":"123","Name":"Vijay","Quantity":"60","Rate":"60","Amount":"3600"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]},"Customer29Jan16Obj":{"rowset":[{"CuObjId":"456","FullAddress":"SilkBoard","ObjAddr":"Bangalore","ObjName":"Testing"}],"meta":{"parentreference":"***","pkname":"***","fkname":"***"},"rowfilter":[]}}}; 

function compareJSON(json1, json2) { 
    var objectsDiffering = []; 
    compareJSONRecursive(json1, json2, objectsDiffering); 
    return objectsDiffering; 
} 

function compareJSONRecursive(json1, json2, objectsDiffering) { 
    for(prop in json1) { 
    if(json2.hasOwnProperty(prop)) { 
     switch(typeof(json1[prop])) { 
     case "object": 
      compareJSONRecursive(json1[prop], json2[prop], objectsDiffering); 
      break; 
     default: 
      if(json1[prop] !== json2[prop]) { 
      objectsDiffering.push(json1); 
      } 
      break; 
     } 
    } 
    else { 
     objectsDiffering.push(json1); 
     break; 
    } 
    } 
} 

var differing = compareJSON(json1, json2); 
console.log(JSON.stringify(differing)); 
//Logs: [{"CuId":"123","Name":"Ranjini","Quantity":"60","Rate":"60","Amount":"3600"},{"CuObjId":"456","FullAddress":"Electronic City","ObjAddr":"Bangalore","ObjName":"Testing"}] 
+0

あなたのコードをありがとう。今私はこれに小さな問題があります。既存のオブジェクトのプロパティが一致しないときは、「operationContext:IsUpdate」を追加する必要があります。 JSON1には存在しない同じオブジェクト全体がJSON1にあり、その場合は「operationContext:IsAdded」を追加する必要があります。私はあなたが私のポイントを得ることを願っています。 – bagya

+0

@bagyaこれを 'objectsDiffering.push(json1);の前に追加します。あなたはオブジェクトのプロパティを正しく設定したいですか? – Arg0n

+0

はい...フィドルを見てください。 https://jsfiddle.net/bagya1985/y9efgzh6/2/。このフィドルは、オブジェクトの変更を照合するために働いています。一致しないオブジェクトと仮定する。 "operationContext:IsAdded"を含める必要があるところ – bagya

5

使用angular.equals(o1,o2)。それは深い比較を行い、キー

angular.equals(JSON1, JSON2); // return boolean (true or false) based on the comparison 

の順序に依存しないで参照してください:あなたが構築するために、私は出発して実施例を作った Angularjs Docs

+0

それは真または偽を与えるでしょう。正確に一致しないオブジェクト値が必要です。この例のJSONオブジェクト名 "Customer29Jan16"では、別のJSONと異なる名前属性です。私はそこにフラグを追加するインデックスを見つける必要があります。私はあなたが私の必要条件を満たすことを望みます。 – bagya

+0

@bagyaこれをチェックアウト:http://stackoverflow.com/questions/4465244/compare-2-json-objects あなたのニーズに合わせて変更することができます –

関連する問題