API 응답을 받았는데 한 줄로 쭉 이어져 있다. 중괄호와 대괄호가 수백 개씩 얽혀 있는 걸 눈으로 읽으려면 눈이 아프다. 게다가 어딘가에 쉼표 하나가 빠져서 파싱 에러가 나는데, 어디가 문제인지 찾을 수가 없다.
JSON이 깨지는 흔한 원인 5가지
- 마지막 요소 뒤 쉼표:
{"a": 1, "b": 2,}→ 마지막 쉼표(trailing comma)는 JSON에서 허용되지 않는다. - 작은따옴표 사용:
{'name': 'test'}→ JSON은 반드시 큰따옴표만 허용한다. - 키에 따옴표 누락:
{name: "test"}→ 키도 반드시 큰따옴표로 감싸야 한다. - 줄바꿈 문자 미처리: 문자열 값 안에 이스케이프 안 한 줄바꿈이 있으면 파싱이 실패한다.
- 인코딩 문제: UTF-8이 아닌 인코딩으로 저장된 파일에서 한글이 깨지는 경우가 있다.
에러 메시지가 "Unexpected token at position 1234"처럼 나오면, 해당 위치를 찾기 위해 줄 번호를 세야 하는데 한 줄짜리 JSON에서는 사실상 불가능하다.
정렬하면 문제가 보인다
한 줄로 압축된 JSON을 들여쓰기로 정렬(pretty print)하면 구조가 한눈에 파악된다. 어디서 중괄호가 닫히는지, 배열이 몇 개인지, 어디에 쉼표가 빠졌는지 바로 보인다.
// 정렬 전
{"users":[{"id":1,"name":"김철수","active":true},{"id":2,"name":"이영희","active":false}]}
// 정렬 후
{
"users": [
{
"id": 1,
"name": "김철수",
"active": true
},
{
"id": 2,
"name": "이영희",
"active": false
}
]
}
JSON 포매터에 데이터를 붙여넣고 정렬 버튼을 누르면 위처럼 바뀐다. 문법 오류가 있으면 어느 줄, 어느 위치가 잘못됐는지 바로 표시해줘서 디버깅 시간이 크게 줄어든다.
정렬과 압축, 언제 어떤 걸 쓰나
| 작업 | 쓰는 상황 | 결과 |
|---|---|---|
| 정렬 (Format) | 코드 리뷰, 디버깅, 구조 파악 | 들여쓰기 추가, 가독성 향상 |
| 압축 (Minify) | API 전송, 설정 파일 배포, 저장 용량 절약 | 공백 제거, 파일 크기 감소 |
| 키 정렬 (Sort) | 여러 JSON 비교, 일관성 유지 | 키를 알파벳순으로 정렬 |
TIP API 응답 두 개를 비교할 때 키 정렬을 먼저 하면 diff 비교가 훨씬 깔끔해진다. 키 순서가 다르면 내용이 같아도 다르게 보이기 때문이다.
JSON 에러는 찾으면 1초에 고치지만, 찾는 데 30분이 걸리는 경우가 많다. 정렬부터 하면 절반은 해결된다.