2013-08-22 3 views
2

웹 페이지가로드 될 때 JSON이로드되며 클라이언트의 사용자 작업을 통해 JSON이 변경됩니다. 사용자가 멀리 이동할 때 JSON이 변경되었는지 확인하고 싶습니다. JSON 내부에서 값을 하나씩 비교하는 대신 해시 문자열을 만들고 JavaScript로 전체를 비교하는 방법은 무엇입니까?Javascript에서 JSON이 변경되었는지 확인하는 방법은 무엇입니까?

+0

누가 두 개의 JSON을 생성합니까? (이전과 새로운) 모두 JS 코드에 의해 생성됩니까? – xanatos

+1

JSON은 실제로 JS의 문자열이기 때문에 최종 문자열을 원래 문자열과 간단히 비교할 수 있습니다. 그러나 사이에 JSON을 구문 분석하고 객체를 수정 한 다음 객체를 JSON으로 다시 변환하면 속성이 동일한 순서로 나열된다는 보장이 없습니다. 하지만 원본 JSON 문자열을 파싱하고 JS로 JSON으로 다시 변환하면 문제를 피할 수 있습니다. –

+0

@xanatos 하나는 서버에서 반환되고 사용자가 앱에서 작업 할 때로드되어 JSON이 수시로 업데이트됩니다. – Nishanthan

답변

5

데이터의 문자열 버전을 사용해보십시오.

예.

JSON.stringify(orig) == JSON.stringify(current) 

참고 : 키의 순서가 변경 얻을 수 있기 때문에 원래 JSON 또는 그것의 캐릭터 라인 버전의 깊은 사본을 보관해야하는이 경우,도 위양성의 가능성이 있습니다.

기본 JSON을 지원하지 않는 브라우저의 경우 json2과 같은 라이브러리를 사용해야 할 수 있습니다.

+2

* "키 순서가 변경 될 수 있습니다."* 원본 JSON이 다른 곳에서 생성 된 경우에만 발생할 수 있습니다. PHP 스크립트. 동일한 데이터에서 JSON.stringify를 호출하면 매번 동일한 결과가 생성됩니다. 관련 항목 : http://stackoverflow.com/questions/8931967/is-there-a-deterministic-equivalent-of-json-stringify. 나는 MDN이 엔진 들간의 차이점을 언급하기를 바랍니다. 동일한 엔진은 항상 동일한 결과를 만들어야합니다. –

5

그리고 또 다른 방법이있다. 이제 underscorejs 또는 lodash 함수를 사용하여 deep-equal 비교를 수행 할 수 있습니다.

_.isEqual(a, b) 
관련 문제