sourcecode

2개의 JSON 객체 비교

codebag 2023. 2. 15. 21:55
반응형

2개의 JSON 객체 비교

중복 가능성:
JavaScript에서의 객체 비교

2개의 JSON 오브젝트를 도입하여 그 2개를 비교하여 변경된 데이터가 없는지 확인하는 방법이 있습니까?

편집

코멘트를 검토한 후, 어느 정도 설명이 필요합니다.

  1. JSON 오브젝트는 다음과 같이 정의됩니다.

    "이름/값 쌍의 순서가 정렬되지 않았습니다.개체는 {(왼쪽 중괄호)로 시작하고 }(오른쪽 중괄호)로 끝납니다.각 이름 뒤에는 : (마이너스)가 붙고 이름과 값의 쌍은 , (마이너스)로 구분됩니다." -- json.org

  2. 간단하게 말하면, 2개의 JSON 오브젝트 리터럴을 비교할 수 있는 것이 목표입니다.

저는 javascript guru가 아니기 때문에 javascript에서 오브젝트 리터럴이라면 그렇게 불러야 할 것 같습니다.

제가 찾고 있는 방법은 다음과 같습니다.

  1. 고유한 이름/값 쌍을 찾기 위한 심층 재귀
  2. 두 객체 리터럴의 길이를 확인하고 이름/값 쌍을 비교하여 불일치가 있는지 확인합니다.

JSON을 구문 분석하고 두 개체를 비교하는 것만으로는 완전히 동일한 개체 참조가 아니기 때문에 충분하지 않습니다(단, 같은 값일 수도 있음).

대등하게 행동해야 해

from 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))
   ...

언급URL : https://stackoverflow.com/questions/4465244/compare-2-json-objects

반응형