API 응답, 설정 파일, 데이터베이스 덤프 — JSON은 어디서든 마주칩니다. 문제는 압축된 JSON은 거의 읽을 수 없다는 것입니다. 이 글에서는 JSON 포맷팅이 왜 필요한지, 어떻게 빠르게 처리하는지 정리합니다.
JSON 포맷팅이란?
포맷팅(또는 “pretty-print”)은 들여쓰기와 줄바꿈을 추가해 구조를 눈에 띄게 만드는 작업입니다.
포맷팅 전:
{"name":"Alice","age":30,"skills":["js","python"]}
포맷팅 후:
{
"name": "Alice",
"age": 30,
"skills": [
"js",
"python"
]
}
데이터는 동일하지만 가독성은 완전히 달라집니다.
JSON 문법 핵심 규칙
포맷팅 전에 JSON이 유효한지 확인해야 합니다. 핵심 규칙은 다음과 같습니다.
- 문자열은 반드시 큰따옴표 사용 —
"key",'key'는 유효하지 않음 - 키는 반드시 문자열(따옴표 포함)이어야 함
- 후행 쉼표 불허 —
[1, 2, 3,]은 유효하지 않음 - 주석 불허 — 표준 JSON에는 주석이 없음
- 값의 종류 — 문자열, 숫자, 객체, 배열,
true,false,null만 허용
자주 발생하는 JSON 오류
| 오류 유형 | 예시 | 해결책 |
|---|---|---|
| 후행 쉼표 | {"a":1,} | 쉼표 제거 |
| 작은따옴표 | {'a':'b'} | 큰따옴표로 변경 |
| 따옴표 없는 키 | {a: 1} | 키에 따옴표 추가 |
| undefined 값 | {"x": undefined} | null로 대체 |
| 주석 포함 | // comment | 제거 (JSON 비표준) |
온라인 JSON 포맷터 사용하기
JSON을 가장 빠르게 포맷팅하는 방법은 브라우저 기반 도구를 쓰는 것입니다. 설치 없이, IDE 없이 바로 사용할 수 있습니다.
입력하는 즉시 포맷팅하고, 문법 오류를 인라인으로 표시하며, 버튼 하나로 결과를 복사할 수 있습니다.
좋은 JSON 포맷터의 조건
- 실시간 검증 — 입력하면서 오류를 즉시 확인
- 구문 강조 — 중첩 구조를 한눈에 파악
- 명확한 오류 메시지 — 파싱 실패 위치를 정확히 안내
- 복사 버튼 — 한 번의 클릭으로 클립보드 복사
코드에서 JSON 포맷팅하기
JavaScript / Node.js
const ugly = '{"name":"Alice","age":30}';
const pretty = JSON.stringify(JSON.parse(ugly), null, 2);
console.log(pretty);
JSON.stringify(value, replacer, space) — 세 번째 인자가 들여쓰기 너비입니다.
Python
import json
ugly = '{"name": "Alice", "age": 30}'
pretty = json.dumps(json.loads(ugly), indent=2)
print(pretty)
커맨드라인 (jq)
echo '{"name":"Alice"}' | jq .
# 파일 포맷팅:
cat data.json | jq .
jq는 JSON 처리의 표준 Unix 도구입니다. brew install jq 또는 apt install jq로 설치하세요.
JSON 압축(Minify)
포맷팅의 반대 과정입니다. 모든 공백을 제거해 파일 크기를 줄이며, 네트워크 전송 전에 유용합니다.
// JavaScript
const minified = JSON.stringify(JSON.parse(pretty));
ZeroTool JSON 포맷터에서도 압축을 지원합니다. 포맷팅된 JSON을 붙여넣고 Minify 버튼을 누르면 됩니다.
JSON Schema 검증
포맷팅은 문법만 확인합니다. 데이터의 구조(필수 필드, 타입, 패턴)를 검증하려면 JSON Schema를 사용하세요.
{
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": ["name", "age"],
"properties": {
"name": { "type": "string" },
"age": { "type": "integer", "minimum": 0 }
}
}
Node.js에서는 ajv, Python에서는 jsonschema로 프로그래밍 방식으로 검증할 수 있습니다.
대용량 JSON 처리 팁
- 섹션 접기 — 좋은 포맷터는 객체/배열 노드를 접을 수 있어야 함
- 키로 검색 — 스크롤보다 빠른 탐색
- 배열 페이지네이션 — 수천 개 항목은 보이는 것만 렌더링
- 스트리밍 파서 — 50MB 이상 파일은
oboe.js(Node.js)나 Python의ijson사용
요약
| 작업 | 도구 |
|---|---|
| 빠른 포맷팅 / 검증 | ZeroTool JSON 포맷터 |
| CLI 포맷팅 | jq . |
| JavaScript | JSON.stringify(obj, null, 2) |
| Python | json.dumps(obj, indent=2) |
| 스키마 검증 | ajv, jsonschema |
깔끔하게 정렬된 JSON은 디버깅 속도를 높이고, diff 리뷰를 쉽게 만들며, 숨겨진 오류를 줄입니다. 포맷터를 습관적으로 사용하세요.