📋 JSON 포매터 & 유효성 검사기

복잡하게 꼬인 JSON 데이터를 한눈에 보기 쉽게 정렬하고 에러를 찾습니다.

빈 경로는 전체 값입니다. /는 ~1, ~는 ~0으로 이스케이프합니다. 최대 1 MiB.

입력 (Raw JSON)
결과 (Viewer)
// 변환된 JSON이 여기에 표시됩니다.

❤️ 이 무료 툴이 업무에 도움이 되셨나요?

아래 추천 상품을 클릭 한 번 해주시는 것만으로도 서버 유지보수에 아주 큰 힘이 됩니다!

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

📖 JSON(JavaScript Object Notation)이란?

데이터를 저장하거나 전송할 때 많이 사용되는 경량의 데이터 교환 형식입니다. 사람과 기계 모두 읽고 쓰기 쉽게 텍스트로 이루어져 있어 API 통신(RESTful API)에서 표준처럼 사용됩니다.

🛡️ 개인정보 보호 안전망

포매팅 코드는 입력을 현재 브라우저에서 처리하며 서버에 전송하거나 자동 저장하지 않습니다. 광고 요청 등 외부 통신은 별도로 발생하므로 실제 고객 데이터나 인증 키 대신 비식별 예제를 사용하세요.

💡 API 응답을 읽기 위한 JSON 문법 및 디버깅 가이드

현대의 웹 개발 환경에서 클라이언트(React, Vue, iOS, Android 등)와 서버(Node.js, Spring, Django 등)가 데이터를 주고받을 때 가장 널리 쓰이는 포맷이 바로 JSON입니다. 과거에는 마크업 언어인 XML을 주로 사용했지만, 태그가 복잡하고 파일 용량이 커지는 단점 때문에 현재는 가볍고 직관적인 JSON이 사실상 글로벌 표준으로 자리 잡았습니다.

1. JSON(제이슨)의 핵심 문법 규칙

JSON은 자바스크립트(JavaScript)의 객체 표기법에서 유래했지만, 언어에 종속되지 않는 독립적인 데이터 포맷입니다. 따라서 파싱(Parsing) 에러를 막기 위해서는 아래의 엄격한 문법을 반드시 지켜야 합니다.

2. 개발자를 괴롭히는 "JSON.parse: unexpected character" 에러의 원인

응답을 JSON으로 읽는 단계에서 JSON 파싱 에러가 난다면 응답 상태와 실제 본문을 먼저 확인하세요. 본 포매터(Formatter) 도구는 이러한 에러를 실시간으로 추적하여 알려줍니다. 주요 원인은 다음과 같습니다.

  1. HTML이나 텍스트가 섞여 들어온 경우: API 서버 측에 에러가 발생하여 정상적인 JSON이 아닌, 500 Internal Server Error를 알리는 HTML 코드를 응답으로 내려보냈을 때 프론트엔드에서 이를 JSON.parse() 하려다 발생합니다.
  2. 이스케이프(Escape) 문자 누락: 문자열 값 내부에 쌍따옴표나 백슬래시(\)가 포함되어 있을 때, 이를 \" 나 \\ 로 적절히 이스케이프 처리하지 않은 경우입니다.
  3. BOM(Byte Order Mark) 포함: 파일을 UTF-8로 저장할 때 눈에 보이지 않는 BOM 문자가 맨 앞에 추가되어 파서(Parser)가 이를 인식하지 못하는 경우입니다.

3. JSON 포매터(Formatter)와 압축(Minify)의 활용

네트워크 대역폭을 아끼기 위해 서버가 프론트엔드로 JSON 데이터를 보낼 때는 모든 공백과 줄바꿈을 제거한 '압축(Minified)' 상태로 전송합니다. 하지만 개발자가 이를 디버깅하거나 구조를 분석하려면 눈으로 읽기 매우 어렵습니다.

본 JSON 뷰어 & 포매터 도구는 한 줄로 뭉쳐진 데이터를 표준 들여쓰기(Indent) 간격으로 예쁘게 정렬(Beautify)해주고, 키(Key)와 값(Value)의 데이터 타입에 따라 직관적인 신택스 하이라이팅(Syntax Highlighting)을 적용하여 개발자의 퇴근 시간을 앞당겨줍니다.

API 응답을 정렬한 다음 필요한 값만 꺼내기

JSON Pointer로 중첩 데이터 추출

‘API 예제’를 누른 뒤 /users/0/name을 추출하면 "민수"가 나옵니다. 배열 인덱스는 0부터 시작합니다. 키 이름이 a/b라면 /a~1b, 키가 ~meta라면 /~0meta로 지정합니다. 빈 경로는 문서 전체, /는 이름이 빈 문자열인 키입니다. JSONPath의 $.users[*] 문법은 지원하지 않습니다.

키 정렬과 압축의 차이

객체 키 정렬을 켜면 중첩 객체까지 키를 비교해 정렬합니다. 배열 순서는 값의 의미이므로 바꾸지 않습니다. JavaScript가 정수 형태의 객체 키를 열거하는 규칙 때문에 숫자 키는 숫자 순서로 표시될 수 있습니다. 이 기능은 서명용 정규화 규격이 아닙니다. 압축은 결과의 줄바꿈과 들여쓰기를 줄이지만 문자열 내부의 공백은 그대로 보존합니다.

큰 숫자와 중복 키를 확인하세요

브라우저의 JSON 숫자는 JavaScript Number로 처리됩니다. 정수 안전 범위 밖의 값과 무한대로 해석되는 숫자는 손실된 결과를 내보내지 않도록 중단합니다. 긴 주문번호는 "9007199254740993"처럼 문자열로 전달하세요. 아주 정밀한 소수도 반올림될 수 있습니다. 같은 객체에 키가 반복되면 JSON.parse 규칙에 따라 마지막 값이 남으므로 원본 API에서 중복을 제거해야 합니다.

잘못된 입력을 고치는 순서

  1. 오류에 나온 위치 주변의 큰따옴표, 쉼표, 괄호를 확인합니다.
  2. JSON에는 주석과 마지막 쉼표를 넣지 않습니다. HTML 오류 응답을 붙여넣지 않았는지 확인합니다.
  3. 경로 추출 오류라면 전체 정렬로 실제 키와 배열 길이를 확인합니다. 키는 대소문자를 구분합니다.

JSON Pointer 규격 (RFC 6901) · 다운로드는 현재 성공한 결과만 저장하며 오류가 나면 이전 결과를 지웁니다.

데이터 처리와 문의

이 도구의 변환 코드는 입력·결과를 현재 탭에서 처리하며 서버로 보내거나 자동 저장하지 않습니다. 다운로드는 기기에 파일을 만들고, 복사는 클립보드에 기록합니다. 광고와 외부 라이브러리 요청에는 IP 주소·브라우저 정보가 전달될 수 있습니다. 실제 비밀번호·인증 토큰·고객 정보 대신 비식별 예제를 사용하세요.

오류 제보는 GitHub 문의 게시판(계정 필요)에 브라우저, 옵션, 민감한 값을 지운 재현 예제를 남겨 주세요. DevTool Hub · Google 외부 서비스 안내