Skip to content
jsoncsvonline

100% 클라이언트 측 JSON 비교

JSON 비교 (Diff)

두 JSON 객체를 비교하여 추가되거나 삭제, 변경된 값을 실시간으로 확인하세요.

  • 서버 업로드 제로 — 100% 브라우저 클라이언트 측 문서 비교
  • 중첩된 객체 및 배열 전반의 심층 구조적 차이점 분석
  • 객체 키 순서 무시 및 배열 비교를 위한 스마트 옵션 제공
Array comparison:
원본 JSON (왼쪽) (Left / Before)
수정된 JSON (오른쪽) (Right / After)

구조 비교 엔진

단순한 텍스트 줄바꿈이 아닌 실제 JSON 데이터의 차이점을 비교합니다.

기존 텍스트 비교 도구는 키 순서가 바뀌거나 한 줄로 압축된 JSON을 비교할 때 무의미한 줄 단위 불일치를 쏟아냅니다. 본 도구는 파싱된 데이터 트리를 분석하여 본질적인 데이터 변경 사항만 추적합니다.

객체 키 순서와 무관한 의미론적 비교

RFC 8259에 따르면 JSON 객체 키의 순서는 의미가 없습니다. 본 도구는 단순 키 순서 차이를 무시하고 데이터의 실질적인 변경점만 강조합니다.

심층 재귀 구조 비교(Deep Recursive Diff)

복잡한 중첩 객체와 배열을 재귀적으로 탐색하여 추가, 삭제, 변경된 모든 속성의 정확한 JSON 경로를 생성합니다.

유연한 배열 비교 전략

배열을 인덱스 순서대로 위치 기반 비교하거나 순서 없는 다중 집합(Multiset)으로 비교할 수 있어, 임의 순서로 반환되는 API 응답도 안정적으로 비교할 수 있습니다.

온라인에서 두 JSON 파일 비교 및 차이점 찾기

일반적인 줄 단위 텍스트 비교 도구(git diff 등)로 JSON을 비교하면 데이터 내용은 동일하더라도 키 순서나 들여쓰기 차이로 인해 수많은 오탐(False Positive)이 발생합니다.

당사의 구조적 JSON Diff 엔진은 다음 3단계 자동화 과정을 통해 실질적인 데이터 차이만을 감지합니다:

  1. 구문 표준화: 두 문서를 RFC 8259 규격을 지원하는 파서로 분석하여 메모리상에 계층 구조로 배치합니다.
  2. 재귀적 키 경로 탐색: 모든 키-값 쌍과 중첩된 배열 항목에 명시적 JSON 경로(예: users[0].address.city)를 할당합니다.
  3. 카테고리별 델타 출력: 추가, 삭제, 값 및 데이터 타입 변경 사항을 명확한 시각적 태그로 분류하여 표시합니다.

객체 키 순서 처리 (RFC 8259 표준 준수)

공식 JSON 사양(RFC 8259)에 따르면 객체는 순서가 없는 이름/값 쌍의 모음입니다. 따라서 {"a": 1, "b": 2}와 {"b": 2, "a": 1}은 의미론적으로 완전히 동일한 데이터입니다.

본 도구는 기본적으로 키 순서 무시 모드가 활성화되어 있어 불필요한 차이점을 걸러냅니다. 엄격한 순서 일치가 필요한 경우 옵션을 해제하세요.

배열 비교: 순서 유지 vs 순서 무시

객체 키와 달리 JSON 배열 요소는 순서가 정의되어 있습니다. 그러나 많은 REST 및 GraphQL API에서 태그 목록이나 권한 목록처럼 순서가 중요하지 않은 배열이 사용됩니다.

본 도구는 배열 순서 무시 옵션을 제공합니다. 활성화 시 요소의 위치에 관계없이 데이터 일치 여부를 판별하여 맨 앞에 항목이 추가되어 전체 배열이 변경된 것처럼 보이는 현상을 방지합니다.

JSON Diff 보고서 내보내기 및 공유

비교가 완료되면 RFC 6902 표준 JSON Patch 형식 또는 코드 리뷰용 Markdown 변경 로그로 보고서를 다운로드할 수 있습니다. 모든 파싱은 브라우저에서 로컬로 실행되므로 민감한 데이터도 안전합니다.

Python 및 Node.js에서 프로그래밍 방식으로 JSON 비교하기

테스트 자동화나 CI/CD 배포 파이프라인에서 JSON 비교를 수행할 때 사용하는 표준 구현 코드입니다:

Python (DeepDiff)

import json
from deepdiff import DeepDiff

# Load JSON files or API responses
with open('original.json') as f1, open('modified.json') as f2:
    original_data = json.load(f1)
    modified_data = json.load(f2)

# Deep structural diff with key-order independence
differences = DeepDiff(original_data, modified_data, ignore_order=False)

print("Added keys:", differences.get('dictionary_item_added', {}))
print("Removed keys:", differences.get('dictionary_item_removed', {}))
print("Values changed:", differences.get('values_changed', {}))
print("Type changes:", differences.get('type_changes', {}))

Node.js / TypeScript (fast-json-patch)

import fs from 'node:fs';
import { compare } from 'fast-json-patch';

// Read and parse documents locally
const original = JSON.parse(fs.readFileSync('original.json', 'utf8'));
const modified = JSON.parse(fs.readFileSync('modified.json', 'utf8'));

// Generate standard RFC 6902 JSON patch differences
const delta = compare(original, modified);
console.log('Structured differences:', delta);
// Output: [ { op: 'replace', path: '/user/age', value: 26 }, ... ]

터미널에서 jq와 diff 명령어로 JSON 비교하기

Unix 및 macOS 터미널 환경에서는 diff를 실행하기 전에 jq -S 명령어로 키 순서를 정렬합니다:

# Sort keys alphabetically with jq, then run unified diff
diff -u <(jq -S . original.json) <(jq -S . modified.json)

비교하기 전에 JSON 데이터를 정리해야 하나요? JSON 포매터로 서식을 맞추거나, JSON 유효성 검사기로 오류를 수정하고, JSON to CSV 변환기.

FAQ

자주 묻는 질문

JSON Diff란 무엇이며 일반 텍스트 비교와 어떻게 다른가요?

텍스트 줄 단위가 아닌 구문 트리(AST)를 비교하므로 키 순서 변경이나 들여쓰기 차이로 인한 거짓 차이점(False Positive)을 배제합니다.

객체의 키 순서는 무시되나요?

네, RFC 8259 표준에 따라 객체 내 키 순서는 기본적으로 무시되어 순서가 달라도 동일한 데이터로 인식합니다.

내 데이터가 서버로 업로드되나요?

아닙니다. 모든 변환 작업은 사용자 브라우저의 Web Worker 내부에서 로컬로 실행되므로 파일이 외부 서버로 전송되지 않습니다. 브라우저 개발자 도구의 네트워크(Network) 탭에서 변환을 실행하여 직접 네트워크 요청이 없음을 확인할 수 있습니다. 파일 크기 제한이나 일일 이용 한도가 없는 이유도 서버 비용이 발생하지 않기 때문입니다.

파일 크기에 제한이 있나요?

제한이 없습니다. 입력 데이터를 청크(chunk) 단위로 읽고 스트리밍 방식으로 처리하므로 파일 크기가 커져도 메모리 점유율이 일정하게 유지됩니다. 수 기가바이트(GB) 크기의 대용량 파일도 로컬 컴퓨터 성능에 맞춰 안전하게 변환할 수 있습니다.

무료인가요? 회원가입이 필요한가요?

계정 생성, 로그인, 유료 결제 없이 100% 무료로 모든 기능을 이용하실 수 있습니다.

관련 변환기 및 개발자 도구