JavaScript/JQuery를 사용한 JSON 객체의 차이
-
05-07-2019 - |
문제
숫자 값을 제외하고는 JavaScript에 두 개의 JSON 객체가 있습니다. 다음과 같이 보입니다.
var data = {
"eth0":{"Tx":"4136675","Rx":"13232319"},
"eth1":{"Tx":"4","Rx":"0"},
"lo":{"Tx":"471290","Rx":"471290"}
}
var old = {
"eth0":{"Tx":"4136575","Rx":"13232219"},
"eth1":{"Tx":"4","Rx":"0"},
"lo":{"Tx":"471290","Rx":"471290"}
}
"data"라는 하나의 객체에는 현재 값이 있으며 "Old"라는 다른 객체는 1 초 전과 동일한 값을 갖습니다. JSON 객체 만 출력하고 싶습니다. 변화 값에서 네트워크 인터페이스에서 데이터 처리량을 계산할 수 있습니다.
var throughput = {
"eth0":{"Tx":"100","Rx":"100"},
"eth1":{"Tx":"0","Rx":"0"},
"lo":{"Tx":"0","Rx":"0"}
}
JSON 데이터를 가로 지르는 방법을 잘 모르겠습니다. 여러 인터페이스에 적합 할 수 있습니다.
누구든지 나에게 손을 빌려 줄 수 있습니까? 미리 감사드립니다
해결책
부모 및 자식 객체 속성을 통해 반복 할 수 있습니다.
var diff = {};
for(var p in data){
if (old.hasOwnProperty(p) && typeof(data[p]) == 'object'){
diff[p] = {};
for(var i in data[p]){
if (old[p].hasOwnProperty(i)){
diff[p][i] = data[p][i] - old[p][i];
}
}
}
}
다른 팁
JavaScript에서 개체를 반복하기위한 기본 전제는 그렇습니다.
var whatever = {}; // object to iterate over
for ( var i in whatever )
{
if ( whatever.hasOwnProperty( i ) )
{
// i is the property/key name
// whatever[i] is the value at that property
}
}
체커를 고치는 것은 그리 어렵지 않습니다. 재귀가 필요합니다. 나는 그것을 당신이나 다른 Soer의 운동으로 남겨 두겠습니다.
어쩌면 그것은 이미 충분히 대답했지만 내 뻔뻔한 플러그를 추가하겠습니다 :) json (실제로 JavaScript 객체 또는 배열 구조) Diff & Patch Library I Github에서 오픈 소스 :
https://github.com/benjamine/jsondiffpatch
클라이언트 (테스트 페이지 확인) 및 서버 측면을 사용할 수있는 Diffs (JSON 형식 및 작은 발자국)를 생성하고 현재 사용하면 사용합니다. http://code.google.com/p/google-diff-match-patch/ 긴 문자열의 경우 자동으로.
~을 체크하다 데모 작동 방식을 확인하는 페이지.
이것은 비슷한 문제를 다룰 때 나에게 속임수를 일으켰습니다. 첫 번째에 비해 두 번째 차이를 얻습니다.
var first = originalObj;
var second = modifiedObj;
var diff = {};
var differ = function(first, second, result) {
var i = 0;
for (i in first) {
if (typeof first[i] == "object" && typeof second[i] == "object") {
result[i] = differ(first[i], second[i], {});
if (!result[i]) delete result[i];
} else if (first[i] != second[i]) {
result[i] = second[i];
}
}
return isEmpty(result) ? undefined : result;
}
differ(old_conf, new_conf, diff);
코드는 약간 특별한 경우이지만 일반적인 아이디어를 얻습니다 : P
객체 Traversal 모듈을 사용할 수 있습니다 nervgh/object-traverse
이것을하기 위해.
var result = {}
Object.traverse(old, function(node, value, key, path) {
var resultObject = result
for(var n=0; n<path.length-1; n++) {
resultObject = resultObject[path[n]]
}
resultObject[key] = value
});