JSON 비교
두 JSON 객체를 비교하고 차이점을 확인합니다.
두 JSON 문서를 나란히 넣고 키와 값의 차이를 트리 형태로 보여 줍니다. 추가, 삭제, 변경, 동일 여부를 항목마다 표시합니다.
사용 순서
- 왼쪽 칸에 기준이 되는 JSON을 붙여 넣습니다.
- 오른쪽 칸에 비교할 JSON을 붙여 넣습니다.
- 아래 비교 결과 트리에서 추가, 삭제, 변경 표시를 확인합니다.
- 배열 항목은 인덱스 번호로 비교되므로, 번호별로 바뀐 항목을 확인합니다.
예시
왼쪽이 {"a":1,"b":[1,2],"c":"x"}이고 오른쪽이 {"a":2,"b":[1,3,4]}이면, a는 1에서 2로 바뀌고, b[1]은 2에서 3으로 바뀌고, b[2]는 4가 추가되고, c는 삭제된 것으로 나옵니다.
한계
입력은 JSON5 문법으로 읽으므로 주석, 작은따옴표, 마지막 쉼표가 있어도 통과합니다. 표준 JSON 파서에서는 실패하므로 결과를 그대로 배포하면 안 됩니다. 배열은 위치 기준으로 비교하므로 앞에 항목이 하나 끼면 뒤의 모든 항목이 변경으로 나옵니다. 객체 키의 순서 차이는 무시합니다.
보안 주의
JSON5를 허용하기 때문에 주석에 적힌 메모나 비활성화된 설정도 함께 보입니다. 설정 파일을 비교한 결과를 공유할 때는 주석 안에 내부 주소나 자격 정보가 남아 있지 않은지 확인하세요.
배경 지식
JSON 비교는 텍스트 diff와 달리 구조를 봅니다. 같은 값이 다른 줄에 있어도 같은 것으로 보고, 키의 순서나 들여쓰기 차이는 의미가 없다고 판단합니다. 객체는 키 단위로, 배열은 인덱스 단위로 짝을 맞춰 재귀적으로 비교합니다. API 응답 변경 확인, 배포 전 설정 파일 점검, 테스트 픽스처 비교에서 이 방식이 훨씬 정확합니다.
배열 비교의 한계는 설계상 생기는 결과입니다. 순서가 의미 없는 목록이라도 위치로 비교하면 중간 삽입이 전체 변경처럼 보입니다. 이를 피하려면 정렬하거나 고유 ID를 기준으로 맞춰서 비교해야 합니다. 중첩이 깊을수록 결과 트리도 길어지므로, 변경이 있는 가지만 펼쳐 보는 것이 읽기 쉽습니다.
자주 묻는 질문
값의 타입만 다르면(문자열 "1"과 숫자 1) 다르게 나오나요?
네. 두 값은 타입이 다르므로 같지 않다고 판단되어 변경으로 표시됩니다. 값은 같아 보여도 문자열과 숫자를 구분하는 API에서는 이 차이가 실제 장애의 원인이 됩니다.
null과 키가 없는 것은 어떻게 다른가요?
이 도구에서 null은 값이 있는 것으로 보고 비교합니다. 키가 아예 없으면 undefined로 취급되어 추가나 삭제로 나옵니다. 그래서 null을 기본값으로 쓰는 API에서는 키를 생략한 것과 null로 설정한 것이 서로 다른 변경으로 표시됩니다.
주석이 있는 JSON 파일도 비교할 수 있나요?
가능합니다. JSON5 파서가 // 와 /* */ 주석을 무시하므로 주석이 많은 설정 파일도 비교됩니다. 다만 주석 내용은 비교 대상이 아니므로, 주석만 바뀐 경우에는 변경 없음으로 나옵니다.