JSON 비교
두 JSON 문서를 붙여 넣으면 바뀐 경로가 즉시 나타납니다. 버튼도, 업로드도 없습니다.
차이0추가된 경로0변경된 값0삭제된 경로
사용 방법
- 이전 JSON은 “원본 JSON”에, 새 JSON은 “변경된 JSON”에 붙여 넣으세요. 추가, 삭제, 변경된 모든 경로가 입력하는 대로 나타나며 누를 버튼은 없습니다.
- 키 순서, 1과 1.0, 1e0과 1, \u00e9와 é는 차이가 아닙니다. 비교는 구조 기준입니다. 서식이나 키 순서 변경을 검토하려면 텍스트 비교 도구를 쓰세요.
- “diff 복사”를 누르면 전체 목록을 가져갈 수 있습니다. 각 줄은 +, -, ~ 뒤에 경로와 전체 값이 붙어 티켓이나 메일에 바로 쓸 수 있습니다.
예시
두 문서
【원본】
{"order":"A-2026-001","customer":{"name":"김민준","city":"서울"},"total":1299.5,"paid":false}
【변경】
{"order":"A-2026-001","customer":{"name":"김민준","city":"부산"},"total":1399.0,"paid":true,"coupon":"WELCOME10"}차이
+ $.coupon "WELCOME10" ~ $.customer.city "서울" → "부산" ~ $.total 1299.5 → 1399.0 ~ $.paid false → true (+1 ~3 −0)
【원본】/【변경】 줄은 예시 머리글입니다. 실제로는 두 문서를 각각 입력 상자에 넣습니다. 실제 값 변경만 나열하므로 그대로인 주문 번호와 고객 이름은 나오지 않고, 키 순서는 언제나 차이가 아닙니다.
규칙, 한계, 알려진 문제
- 텍스트 diff가 아니라 구조 diff입니다. 객체 키 순서는 무시하고 1, 1.0, 1e0은 같은 수이며 "\u00e9"와 "é"는 같은 문자열입니다. 서식 변경이 중요하면 텍스트 비교 도구를 쓰세요.
- 숫자는 정확한 십진수로 비교하며 JavaScript Number를 거치지 않습니다. 9007199254740993은 정확히 유지되고 1e400이 Infinity가 되지 않습니다. 목록에는 입력한 숫자가 그대로 보입니다.
- 문자열은 해독된 값으로 비교하고 표준 JSON 형태로 보여 줍니다. 중복 키는 JSON.parse처럼 마지막 값을 쓰며 경고로 중복 개수를 알려 줍니다.
- 배열은 순서가 있습니다. 삽입과 삭제를 정렬하므로 맨 앞에 항목 하나를 더하면 “+” 한 줄이지 뒤따르는 모든 항목의 변경이 아닙니다. 이동은 삭제 하나와 추가 하나로 보고하며 “배열 순서 무시” 옵션은 없습니다.
- 하위 트리 전체를 더하거나 지우면 경로 하나입니다. 아주 긴 값은 화면에서 “객체 · 키 N개”나 “배열 · 항목 N개”로 보여 주지만 “diff 복사”에는 항상 전체 값이 들어갑니다.
- “diff 복사”는 JSON Patch가 아니라 일반 텍스트 변경 목록(+ / - / ~, 경로, 전체 값)입니다. 배열 삽입과 삭제는 뒤 인덱스를 밀기 때문에 단순한 JSON Patch로는 적용되지 않습니다.
- 경로는 $.a.b[0] 형식을 씁니다. 삭제된 항목은 이전 인덱스를, 추가·변경된 항목은 새 문서를 가리킵니다.
- 한도: 합쳐서 20만 자를 넘으면 입력을 멈추고 약 0.6초 뒤 결과가 갱신됩니다. 문서 하나가 100만 자를 넘거나 중첩이 256단계를 넘으면 오류로 알리고 잘라 내지 않습니다. 정렬 한도를 넘는 배열은 인덱스로 비교하며 안내를 표시합니다. 변경 줄은 최대 400개까지 그리지만 복사에는 항상 전체 목록이 들어갑니다.
- 파일 업로드, URL 불러오기, JSON Schema나 JSONPath 질의, 기록, 공유 링크는 없습니다. 모든 처리가 브라우저에서 이루어지며 아무것도 업로드하거나 저장하지 않습니다.
- 중국어, 일본어, 한국어 페이지에서는 “전각 문장 부호”가 기본으로 켜집니다. 문자열 밖의 문장 부호는 ASCII로 접고 문자열 내용은 입력한 그대로 둡니다.
관련 개발자 도구
두 문서를 비교한 뒤 흔히 이어서 쓰는 도구입니다.