두 JSON 구조를 비교하고 차이점을 확인하는 방법
두 입력 영역에 유효한 JSON을 넣어 비교하면 파싱된 구조의 일치 여부와 구조적 차이를 확인할 수 있습니다.
JSON 비교를 시작하기 전에
JSON Diff는 두 JSON 입력을 읽고, 단순한 글자 차이가 아니라 파싱된 구조를 대조하는 도구입니다. 설정 자료, API 응답, 변환 전후 데이터처럼 같은 형식으로 보이는 두 결과를 점검할 때 사용할 수 있습니다. 객체 안에 객체가 들어간 경우도 비교 대상에 포함됩니다. 배열이 포함된 데이터도 파싱 가능한 JSON이라면 함께 살펴볼 수 있습니다. 따라서 공백이나 줄바꿈을 일일이 대조하기보다, 데이터의 구성과 값이 달라졌는지 확인하려는 상황에 맞습니다. 첫 번째 입력과 두 번째 입력은 각각 선택적으로 사용할 수 있습니다. 다만 실제 비교 결과를 얻으려면 두 입력에 비교할 JSON을 넣어야 합니다. 입력을 준비할 때는 비교 대상이 텍스트로 보이는지보다 JSON으로 해석될 수 있는지를 먼저 확인하는 편이 좋습니다. 이렇게 준비하면 결과에서 같은 구조인지, 차이가 있는지, 차이가 몇 개인지를 구분해 읽을 수 있습니다.
두 입력을 넣고 비교하는 절차
-
비교할 원본 JSON을 정합니다. 예를 들어 변환 전 API 응답을 첫 번째 자료로 선택하고, 변환 후 응답을 두 번째 자료로 선택할 수 있습니다. 두 자료의 순서를 먼저 정하면 추가된 속성과 제거된 속성을 결과에서 따라가기 쉽습니다.
-
첫 번째 입력 영역에 첫 번째 JSON을 넣습니다. 두 번째 입력 영역에는 대응하는 두 번째 JSON을 넣습니다. 입력 영역은 선택 사항이지만, 둘 중 하나라도 비어 있으면 일반적인 두 구조 비교와 다른 결과가 나옵니다. 빈칸을 의도한 것이 아니라면 복사 과정에서 내용이 빠지지 않았는지 확인합니다.
-
각 입력이 JSON 문법에 맞는지 살핍니다. 객체는 중괄호로, 배열은 대괄호로 표현되는지 확인하고, 속성 이름과 문자열에 필요한 큰따옴표가 있는지 점검합니다. 쉼표가 빠졌거나 불필요한 쉼표가 남아 있으면 해석할 수 없는 입력이 될 수 있습니다. 숫자, 문자열, 참과 거짓, null도 JSON에서 허용되는 형태로 작성해야 합니다. 주석이 섞인 자료나 JSON 바깥의 설명 문장이 있다면 입력 전에 제거합니다.
-
비교를 실행합니다. 두 입력이 모두 공백이 아닌 유효한 JSON이면 도구가 각 자료를 파싱한 뒤 구조를 비교합니다. 중첩된 객체의 내부 속성도 비교 범위에 들어갑니다. 배열에서는 배열 길이의 변화와 대응하는 위치 안의 차이가 보고될 수 있습니다. 객체 속성이 추가되거나 사라진 경우에도 구조적 차이로 다뤄집니다.
-
성공 결과의 동일 여부를 먼저 읽습니다. 파싱된 두 구조가 일치하면 동일하다는 뜻이고, 일치하지 않으면 차이가 있다는 뜻입니다. 차이가 발견된 경우에는 결과에 차이 개수가 함께 표시됩니다. 그다음 추가된 속성, 제거된 속성, 변경된 값, 배열 길이의 변화, 대응 위치의 차이처럼 표시된 종류를 차례로 확인합니다.
-
입력이 비어 있거나 공백만 있는 경우를 별도로 판단합니다. 이 경우 성공 결과가 반환되지만 차이는 보고되지 않고, 입력이 동일하지 않다고 표시됩니다. 이것은 두 JSON의 구조가 같다는 확인으로 해석하면 안 됩니다. 반대로 내용이 있는 입력을 JSON으로 파싱하지 못하면 성공 결과가 아니라 파싱 오류 정보가 포함된 결과가 반환됩니다. 이때는 차이 개수나 차이 항목보다 오류가 가리키는 문법 문제를 먼저 고친 뒤 다시 실행합니다.
비교 결과를 해석하는 기준
결과가 동일하다고 표시되면 두 입력을 JSON으로 해석한 뒤 얻은 구조가 서로 맞는다는 의미입니다. 이는 입력 문자열의 모양이 완전히 같다는 뜻으로만 읽을 필요는 없습니다. 반대로 동일하지 않다는 표시가 나오면 결과에 제시된 차이 항목을 기준으로 어느 부분이 달라졌는지 살핍니다. 차이 개수는 발견된 구조적 차이의 수를 파악하는 데 도움을 줍니다. 개수만 보고 원인을 단정하지 말고, 속성의 추가 또는 제거인지, 값의 변경인지, 배열 길이의 변화인지, 대응하는 배열 위치의 차이인지 세부 내용을 함께 확인합니다.
중첩 객체의 차이는 바깥 객체만 보아서는 놓칠 수 있으므로 안쪽 경로까지 따라가야 합니다. 배열은 같은 위치에 있는 값끼리 달라졌는지와 길이가 변했는지를 나누어 살펴보는 것이 좋습니다. 결과가 성공하지 않은 경우에는 구조 비교가 완료된 것으로 해석하지 않습니다. 파싱 오류 정보가 있다는 것은 입력 중 적어도 하나를 JSON으로 읽지 못했다는 뜻이므로, 문법을 수정한 뒤 새 결과를 확인해야 합니다. 이 도구의 역할은 파싱된 구조 사이의 차이를 보고하는 데 있습니다. 보고된 내용을 자동으로 병합하거나, 원본을 고치거나, 해결 방법을 제안하는 기능으로 확대해 해석해서는 안 됩니다. 따라서 결과는 검토할 위치를 찾는 자료로 활용하고, 실제 수정은 원본과 사용 목적을 확인하면서 별도로 진행합니다.
사용 예시
API 응답의 이름 값이 변환 전후에 달라졌는지 확인하기 위해 두 JSON을 비교합니다.
첫 번째 입력에 {"name":"민수","tags":["a"]}를 넣고, 두 번째 입력에는 name 값만 다르게 작성한 JSON을 넣은 뒤 비교를 실행합니다.
두 입력이 동일하지 않다고 표시되며, 이름 값에 해당하는 구조적 차이와 차이 개수가 보고됩니다.
제한 사항
- 구조의 일치 여부와 차이를 보고하는 도구이므로, 차이를 자동으로 병합하거나 원본을 수정하는 기능으로 사용할 수는 없습니다.
자주 발생하는 오류
- 입력에 JSON 바깥의 문장이나 잘못된 쉼표가 남아 있으면 파싱 오류가 반환될 수 있습니다. 설명 문장과 문법 문제를 제거하고 유효한 JSON만 다시 입력하세요.
자주 묻는 질문
두 JSON 입력을 모두 넣어야 하나요?
실제 구조 비교에는 두 입력이 모두 필요합니다. 입력 영역 자체는 선택 사항이며, 한쪽이 비어 있거나 공백만 있으면 성공 결과가 반환되지만 차이는 보고되지 않고 입력이 동일하지 않다고 표시됩니다.
JSON 문법이 잘못되면 어떤 결과가 나오나요?
내용이 있는 입력을 JSON으로 해석하지 못하면 성공하지 않은 결과와 파싱 오류 정보가 반환됩니다. 오류를 먼저 고쳐야 구조적 차이 결과를 해석할 수 있습니다.
어떤 종류의 차이를 확인할 수 있나요?
추가 또는 제거된 객체 속성, 변경된 값, 배열 길이의 변화, 대응하는 배열 위치의 차이가 보고될 수 있습니다. 차이가 있으면 결과에서 그 차이의 개수도 확인할 수 있습니다.