C.W.K.
Stream
Lesson 08 of 08 · published

흔한 버그와 디버깅 도구

~12 min · json, debugging, validation, tooling

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

흔한 다섯 버그, 그리고 빠르게 고치는 법

1. Trailing comma

가장 흔한 JSON 파스 에러. {"a": 1,} 가 'expected property name, got }' 로 죽음. 수정: trailing comma 제거. 예방: JSON 규칙 아는 도구로 저장 시 포맷.

2. Single quote

JS / Python 소스에서 붙여넣기: {'name': 'Pippa'}. 수정 기계적: sed "s/'/\"/g", 또는 sandbox 에서 JSON.stringify(eval(...)), 또는 다시 타이핑.

3. 주석

JSON 의 // 주석 또는 /* ... */ 가 죽음. 수정: 떼어내거나 JSONC (VS Code config) / JSON5 (명시적 파서 opt-in) 로 전환. spec 과 싸우지 마.

4. 문자열 안 escape 안 된 특수 문자

raw newline, raw tab, 외로운 백슬래시. \n, \t, \\ 써. 에러는 보통 실제 실수보다 한 줄 뒤 가리켜.

5. 인코딩 불일치

파일 시작에 BOM (byte order mark) 든 UTF-8 이 strict 파서 깨뜨림. Windows 의 많은 에디터가 BOM 조용히 추가. 수정: 'UTF-8 without BOM' 으로 저장. 에러 메시지는 보통 'unexpected token at position 0'.

30 초 디버그 루프: JSON 파일이 파싱 안 되면 jq . file.json 실행. jq 가 대부분 언어 stdlib 가 안 하는 방식으로 syntax error 의 줄과 컬럼 알려줌. 깊이 중첩된 이슈엔 jq -e 가 파스 실패 시 비-0 종료 — CI 에 유용.

Code

Shell 에서 검증·bash
# 빠른 yes/no:
jq -e . config.json > /dev/null && echo OK || echo BROKEN

# Python 등가:
python -m json.tool config.json > /dev/null && echo OK || echo BROKEN

# Node 등가:
node -e 'JSON.parse(require("fs").readFileSync("config.json"))' && echo OK || echo BROKEN
Python 의 예쁜 에러 리포트·python
import json

try:
    with open('config.json') as f:
        data = json.load(f)
except json.JSONDecodeError as e:
    print(f'JSON error at line {e.lineno}, column {e.colno}: {e.msg}')
    # 파일 한 번 읽고 문제의 줄 표시:
    with open('config.json') as f:
        lines = f.readlines()
    print(f'  >>> {lines[e.lineno - 1].rstrip()}')
    print(f'      {" " * (e.colno - 1)}^')
검사용 jq (몇 가지 동작)·bash
# 최상위 키 다 보기
jq 'keys' data.json

# 한 키의 모든 값, 배열 가로질러
jq '.[].name' users.json

# 객체로 필터
jq '.[] | select(.age > 18)' users.json

# 모든 최상위 값의 타입
jq 'to_entries | map({key, type: (.value | type)})' data.json

External links

Exercise

직접 안 쓴 JSON 파일 (벤더 config, export 데이터셋, 다운받은 API 응답) 골라. jq . file.jsonpython -m json.tool file.json 실행. 그 다음 일부러 위 다섯 버그 한 번에 하나씩 도입하고 각 도구의 에러 읽어. 각 에러 메시지의 냄새 외워 — 다음 거 30 초 (10 분 아니라) 안에 고치는 법이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.