JSON 비교(Diff)

두 JSON 문서를 비교해 추가·삭제·변경된 모든 키를 전체 경로와 함께 보여주며 배열 순서 무시 옵션도 지원합니다.

차이점 (3)
차이점 (3)

+ 추가됨 · − 삭제됨 · ~ 변경됨 · 값을 누르면 그 값만 복사됩니다.

~ roles[1]: →
~ age: →
+ active =

이 JSON 비교 도구가 하는 일

원본 문서를 A 상자에, 변경된 문서를 B 상자에 붙여넣으면, 이 도구가 두 구조를 재귀적으로 훑어 무엇이 달라졌는지 정확히 나열합니다. 모든 차이는 세 가지 유형 중 하나로 표시됩니다. 추가됨(B에만 있는 키나 배열 요소), 삭제됨(A에만 있음), 변경됨(양쪽에 있지만 값이 다름)입니다. 각 항목에는 값까지의 경로가 함께 표시되며, 객체 키는 점 표기법, 배열 인덱스는 대괄호 표기법을 사용해 user.roles[0]처럼 읽힙니다. 중첩된 값까지 값 자체로 비교하므로, 키 순서만 다르고 내용이 같은 두 문서는 동일한 것으로 처리됩니다.

경로와 비교 방식

두 텍스트 상자는 JSON으로 파싱되어 입력하는 즉시 실시간으로 비교되므로 따로 누를 버튼이 없습니다. 객체는 키로, 배열은 기본적으로 인덱스로 맞춰 비교합니다. 배열 순서 무시를 켜면 같은 값이 순서만 다르게 들어 있는 두 배열은 같은 것으로 처리됩니다. 값의 유형이 바뀌면 — 예를 들어 객체가 숫자로 — 그 값 전체를 여러 하위 차이로 쏟아내지 않고 하나의 변경됨 항목으로 보고합니다. 원시 값은 엄격하게 비교되고 null은 고유한 값으로 취급되므로 null을 0으로 바꾸면 실제 변경으로 인식됩니다. 어느 한쪽에 잘못된 JSON이 있으면 어느 쪽을 고쳐야 하는지 안내 메시지가 표시되고, 둘 다 정상이면 전체 차이 목록을 클립보드로 복사할 수 있습니다.

자주 묻는 질문

경로는 어떤 형식으로 표시되나요?

객체 키는 점 표기법, 배열 요소는 대괄호 인덱스를 사용하며 중첩 데이터에서는 이를 결합합니다. 예를 들어 user.roles[0]은 user 객체 안 roles 배열의 첫 번째 요소를 뜻합니다. 최상위 값의 변경은 (루트)로 표시됩니다.

키 순서나 공백이 결과에 영향을 주나요?

아니요. 문서를 먼저 파싱하므로 서식, 들여쓰기, 객체 내 키 순서는 무시됩니다. 키와 값의 실제 차이만 보고되며, 배열은 기본적으로 인덱스로 비교하므로 순서가 결과에 영향을 주지만, 배열 순서 무시를 켜면 같은 값이 순서만 다르게 들어 있는 두 배열은 같은 것으로 처리됩니다.

주석이 있는 JSON도 되고, 바뀐 곳을 문서 안에서 볼 수 있나요?

네. 두 칸 모두 설정 파일에서 쓰는 느슨한 형식(주석, 끝 쉼표, 따옴표 없는 키)도 읽고, 그렇게 읽었으면 알려 줍니다. 전환 스위치를 켜면 변경 목록 대신 두 번째 문서 전체를 보여 주며 추가·삭제·변경된 줄에 표시를 붙입니다.

차이점 목록에서 값 하나만 복사할 수 있나요?

네. 차이점 목록의 값은 하나하나가 버튼이라, 누르면 그 값만 클립보드에 복사됩니다. 문자열은 따옴표 없이 글자만, 숫자·객체·배열은 JSON 표기 그대로 복사됩니다. 목록 위 범례에도 “값을 누르면 그 값만 복사됩니다.”라고 적혀 있고, “복사” 버튼은 차이점 목록 전체를 복사합니다. 값 누르기는 목록 보기에서 되며, “문서 전체 보기”를 켜면 표시를 붙인 문서 전체가 대신 나옵니다.