JSON 비교 (추가 · 삭제 · 변경 키 찾기)

API 응답 두 버전, 배포 전후 설정 파일처럼 구조가 같은 JSON의 차이를 찾습니다. 키 순서와 들여쓰기 차이는 무시하고 실제 값이 다른 곳만 골라냅니다.

JSON 비교 (추가 · 삭제 · 변경 키 찾기)모두의계산기

텍스트 비교와 무엇이 다른가

일반 diff 도구는 줄 단위로 글자를 비교하므로 키 순서가 바뀌거나 들여쓰기만 달라도 전부 다르다고 표시합니다. 이 도구는 두 입력을 먼저 파싱해 객체·배열 구조로 만든 뒤 같은 경로끼리 값을 비교합니다. 그래서 {"a":1,"b":2}{"b":2,"a":1}은 차이 없음으로 나오고, 값이 실제로 바뀐 곳만 경로로 표시됩니다. 파싱·비교는 브라우저 안에서만 이루어지며 입력은 전송되지 않습니다.

경로 표기

객체 키는 점으로, 배열 인덱스는 대괄호로 이어 씁니다. users[2].address.zip은 users 배열의 세 번째 요소 안 address 객체의 zip 키입니다. 이 표기는 JavaScript 접근식과 같고 jq·JSONPath($.users[2].address.zip)와도 거의 같아 그대로 검색하거나 코드에 옮길 수 있습니다. 타입이 바뀐 경우(숫자 → 문자열, 객체 → null)는 변경 항목에 타입 변화를 함께 적습니다.

배열 순서 무시 옵션

기본은 인덱스별 비교라 ["a","b"]["b","a"]는 두 곳이 변경된 것으로 나옵니다. 태그 목록처럼 순서에 의미가 없는 배열은 옵션을 켜면 집합으로 비교해 같은 요소 구성이면 동일로 봅니다. 요소 수가 같은데 일부만 다르면 짝을 지어 안쪽까지 비교하고, 수가 다르면 추가·삭제로 표시합니다. 객체 배열에서 어떤 요소가 어떤 요소와 짝인지는 추정이므로, 고유 ID가 있다면 그 ID로 정렬한 뒤 인덱스 비교를 하는 편이 정확합니다.

주의할 점

JSON 숫자는 자바스크립트 숫자로 파싱되므로 1.01은 같고, 2^53을 넘는 큰 정수는 끝자리가 반올림되어 다른 값이 같다고 나올 수 있습니다. 문자열 안의 공백·대소문자 차이는 그대로 다른 값입니다. 매우 큰 JSON(수 MB)은 비교 자체는 되지만 결과 목록이 길어 브라우저가 느려질 수 있으니 필요한 부분만 잘라 넣는 것이 좋습니다.

자주 묻는 질문

키 순서가 다른데 왜 차이가 없다고 나오나요?

JSON 객체의 키 순서는 의미가 없어 무시합니다. 순서까지 비교해야 한다면 텍스트 비교 도구를 쓰세요.

null과 키 없음은 구분되나요?

네. 키가 있고 값이 null이면 "변경", 키 자체가 없으면 "추가/삭제"로 표시합니다.

결과를 패치 파일로 쓸 수 있나요?

복사되는 텍스트는 사람이 읽기 위한 형식이지 RFC 6902 JSON Patch는 아닙니다. 경로와 값은 같으니 필요하면 변환해 쓸 수 있습니다.

함께 보기