JSON 포매터
브라우저에서 JSON을 보기 좋게 정리하고 검증하고 압축하세요. 데이터를 붙여넣고 들여쓰기 스타일을 선택하면 깔끔하고 읽기 쉬운 결과를 즉시 얻을 수 있습니다. 아무것도 업로드되지 않습니다.
0줄 · 0자
들여쓰기
JSON 포매터 사용 방법
- 1
JSON 붙여넣기
압축되었거나, 지저분하거나, 이미 들여쓰기된 JSON을 입력 패널에 붙여넣으세요.
- 2
들여쓰기 선택
정렬된 출력의 들여쓰기를 조절하려면 공백 2칸, 공백 4칸, 또는 탭을 선택하세요.
- 3
포맷 또는 압축
'Format'을 클릭해 보기 좋게 정렬하고 JSON을 검증하거나, 'Minify'로 한 줄로 압축하세요.
- 4
결과 복사
'Copy' 버튼으로 정렬되거나 압축된 출력을 프로젝트용으로 가져오세요.
JSON 다루기: 포맷팅, 검증, 그리고 발목을 잡는 실수들
JSON이란 정확히 무엇인가요
JSON(JavaScript Object Notation)은 텍스트 기반의 데이터 교환 형식으로, 서비스들이 HTTP를 통해 서로 대화하는 기본 방식이 되었습니다. 이름과 달리 언어에 독립적입니다. 모든 주류 언어에 파서가 존재하고, 전송 형식은 그저 UTF-8 텍스트일 뿐입니다. 하나의 문서는 정확히 여섯 가지 값 타입으로 만들어집니다. 객체(순서 없는 키/값 모음), 배열(순서 있는 목록), 문자열, 숫자, 불리언 true 와 false, 그리고 null 입니다. API 응답이든 설정 파일이든, 여러분이 직렬화하는 모든 것은 이 여섯 가지로 분해됩니다.
두 가지 규칙이 사람들을 끊임없이 걸려 넘어지게 합니다. 첫째, 객체의 키는 큰따옴표로 감싼 문자열이어야 합니다. JavaScript 객체 리터럴과 달리, 따옴표 없는 식별자는 허용되지 않습니다. 둘째, JSON에는 정수와 부동소수점의 구분이 없고 주석 문법도 없습니다. 숫자는 그냥 숫자이며, 남기고 싶은 사람을 위한 메모는 문자열 값 안에 들어가거나 파싱 전에 제거되어야 합니다.
포맷팅 대 미니파이
이 둘은 같은 데이터의 두 가지 모습입니다. 포맷팅(beautifying 또는 pretty-printing이라고도 합니다)은 줄바꿈과 들여쓰기를 넣어 중첩이 한눈에 보이게 합니다. 페이로드를 읽거나, 버전 관리에서 두 응답을 비교하거나, 예시를 문서에 붙여넣을 때 원하는 것이 바로 이것입니다. 미니파이는 그 반대로, 의미 없는 공백을 한 바이트도 남김없이 없애 하나의 압축된 줄을 만들어 냅니다. 킬로바이트마다 지연과 대역폭의 비용이 드는 네트워크로 보낼 때 쓰는 것이죠.
두 방향 모두 데이터 자체에 대해서는 무손실입니다. JSON에서 토큰 사이의 공백은 결코 의미를 갖지 않으므로, 40줄짜리 객체를 한 줄로 합쳤다가 다시 펼쳐도 파싱된 값은 동일합니다. 바뀌는 것은 바이트 수와 가독성뿐이며, 바로 그 때문에 이 도구는 한 가지 스타일을 강요하지 않고 두 버튼을 모두 제공합니다.
실제로 마주치게 될 문법 오류들
가장 흔한 단 하나의 오류는 끝에 붙은 쉼표입니다. 배열의 마지막 요소나 객체의 마지막 쌍 뒤에 붙은 쉼표 말이죠. JavaScript는 이를 너그럽게 받아들이지만 JSON은 금지하므로, 닫는 괄호 앞에서 쉼표로 끝나는 목록은 파싱에 실패합니다. 그 바로 뒤를 잇는 것이 큰따옴표 대신 작은따옴표를 쓰는 것(JSON 문자열은 반드시 큰따옴표를 써야 합니다)과 JavaScript 소스에서 그대로 복사해 온 따옴표 없는 키입니다.
그 밖에 자주 등장하는 주범으로는, JSONC와 JSON5에서는 유효하지만 엄격한 JSON에서는 그렇지 않은 끼어든 주석(// 또는 블록 형식), 명세에 아예 존재하지 않는 NaN, Infinity, undefined 같은 값, 그리고 문자열 안의 리터럴 탭이나 줄바꿈 같은 이스케이프되지 않은 제어 문자가 있습니다. 검증기가 어떤 줄을 가리키면, 강조된 위치보다 한두 글자 앞을 살펴보세요. 파서는 진짜 실수 뒤의 다음 토큰에 이르러서야 문제를 알아채는 경우가 많습니다.
들여쓰기 스타일 고르기
두 칸은 웹에서 JSON의 사실상 표준이며, 많은 린터와 포매터를 비롯해 대부분의 도구가 기본으로 내보내는 값입니다. 네 칸은 깊이 중첩된 구조를 더 시원하게 읽히게 하고, 탭은 파일을 바이트 단위로 동일하게 유지하면서도 개발자마다 화면상의 너비를 스스로 고르게 해 줍니다. 알맞은 답은 여러분의 저장소가 이미 쓰고 있는 그것입니다. 한 프로젝트 안에서 스타일을 섞으면 시끄럽고 의미 없는 diff가 생깁니다.
들여쓰기는 순전히 겉모습일 뿐이고 문서가 파싱되는 순간 버려지므로, 정확성에는 결코 영향을 주지 않습니다. 너비를 하나 고르고 일관되게 적용한 뒤, 다른 출처에서 붙여넣은 무엇이든 포매터가 정규화하게 두세요.
키 순서와 데이터 무결성
이 포매터는 문서를 다시 들여쓰고 공백을 다시 넣지만, 키의 순서를 바꾸거나 어떤 값도 변경하지 않습니다. 그것이 중요한 이유는, 비록 JSON 명세가 객체를 순서 없는 것으로 정의하더라도 실제 거의 모든 파서가 삽입 순서를 보존하고, 스냅샷 테스트나 서명된 페이로드, diff를 읽는 사람 같은 하류 소비자가 흔히 그 순서에 의존하기 때문입니다. 키를 슬그머니 정렬하는 도구는 서명 검사를 깨뜨리거나, 한 줄짜리 변경을 백 줄짜리 재배치 속에 묻어 버릴 수 있습니다.
만약 안정적인 diff나 콘텐츠 해싱을 위해 정규화된 정렬 출력을 원한다면, 그것은 pretty-printing의 부작용이 아니라 여러분이 알고서 선택해야 하는 의도적이고 별개의 작업입니다. 포맷팅과 재정렬을 별개로 유지한다는 것은, 무엇이 바뀌었는지 언제나 정확히 안다는 뜻입니다.
숫자, 정밀도, 그리고 유니코드
JSON 숫자는 십진수이며 선언된 크기 제한이 없지만, 브라우저에서 이를 파싱하는 JavaScript 엔진은 이를 64비트 부동소수점으로 저장합니다. 그 말은 약 9천조(안전한 정수 상한)보다 큰 정수가 왕복하면서 정밀도를 잃을 수 있다는 뜻이고, 그래서 큰 ID, 스노우플레이크 값, 금액은 원시 숫자가 아니라 흔히 문자열로 전송됩니다. 정확함이 중요하다면 그 값을 따옴표로 감싸세요.
문자열은 완전한 유니코드입니다. 문자를 UTF-8로 직접 적거나 백슬래시-u 이스케이프 시퀀스로 적을 수 있으며, 두 형식 모두 같은 코드 포인트로 파싱됩니다. 형식이 처음부터 끝까지 UTF-8 텍스트이므로, 악센트가 붙은 글자, 비라틴 문자, 이모지는 포맷팅과 미니파이를 거쳐도 손상되지 않고 살아남습니다.
모든 것은 여러분의 브라우저 안에 머뭅니다
모든 파싱, 검증, 재직렬화는 JavaScript로 로컬에서 실행됩니다. 여러분이 붙여넣는 것은 무엇도 업로드되거나 기록되거나 서버에 저장되지 않으므로, 액세스 토큰, 내부 식별자, 고객 데이터가 담긴 API 응답을 포맷팅해도 안전합니다. 실질적인 상한은 어떤 업로드 제한이 아니라 여러분 기기의 메모리이므로, 큰 내보내기 파일도 적당한 사양의 기기에서 문제없이 포맷팅됩니다.
유용한 습관 하나. 연동이 제대로 작동하지 않으면 원시 응답을 먼저 여기에 붙여넣어 보세요. 코드를 탓하기 전에 페이로드가 올바른 형식의 JSON인지 확인하면, 직렬화 버그와 파싱 버그를 몇 초 만에 구분할 수 있고, 그것도 페이로드를 어디로도 흘리지 않고 해낼 수 있습니다.
자주 묻는 질문
Format과 Minify의 차이는 무엇인가요?
포맷터가 내 JSON을 검증하나요?
어떤 들여쓰기 옵션이 있나요?
키 순서를 바꾸거나 데이터를 변경하나요?
내 JSON이 업로드되나요, 그리고 큰 파일도 처리할 수 있나요?
관련 도구
이런 편리한 도구도 함께 사용해 보세요