모든 아티클

JSON Repair: JSON이 왜 깨지고 어떻게 고치는가

"깨진" JSON은 흔한 문제입니다: 파일이 거의 맞는 것처럼 보이지만 파서가 읽기를 거부합니다. 한국어 문서 작성 도구에서 자동으로 바뀐 따옴표가 원인인 경우도 드물지 않습니다.

유효하지 않은 JSON의 흔한 원인

  • 닫는 괄호 앞의 불필요한 쉼표{"a": 1,} — 자바스크립트는 허용하지만 엄격한 JSON 파서는 허용하지 않습니다.
  • 큰따옴표 대신 작은따옴표 — 자바스크립트 객체 리터럴에서 복사할 때 흔히 저지르는 실수입니다.
  • 따옴표 없는 키{"name": "민수"} 대신 {name: "민수"}.
  • 주석 — JSON5나 JSONC와 달리 JSON 명세는 주석을 전혀 허용하지 않습니다.
  • 잘린 출력 — API 응답이나 로그 파일이 중간에 잘리면, 문서가 닫히지 않은 채 남습니다.

한글 워드프로세서의 "스마트 따옴표"가 만드는 오류

한글(HWP)이나 워드 같은 문서 편집기는 기본적으로 자동 고침 기능이 켜져 있어, 입력한 직선 따옴표(")를 둥근 인용부호(“ ”)로 자동 변환합니다. 코드 예제나 API 응답을 이런 문서에서 복사해 JSON 필드에 붙여넣으면 {“name”: “민수”}처럼 보기엔 따옴표가 있어 보이지만, JSON 파서는 유니코드 스마트 따옴표를 문자열 구분자로 인식하지 않습니다 — 결과적으로 키와 값 전체가 구분자 없는 텍스트로 처리되어 파싱이 실패합니다.

자동 복구는 어떻게 작동하는가

JSON 복구 도구는 휴리스틱을 적용합니다: 누락된 따옴표 추가, 불필요한 쉼표 제거, 문맥에 따라 닫히지 않은 괄호 닫기. 이는 전형적이고 흔한 실수에는 잘 작동하지만 마법은 아닙니다 — 데이터가 더 심각하게 손상되었다면 도구는 어떤 값이 의도되었는지 추측할 수 없습니다.

가능한 것의 한계

자동 복구는 문법을 고치지, 의미를 고치지는 않습니다. 필드 전체가 빠졌거나 값이 논리적으로 잘못된 경우, 도구는 이를 감지하지 못합니다 — 결과는 여전히 수동으로 확인해야 합니다. 특히 스마트 따옴표가 섞인 문서에서 복사한 텍스트는 한 번 더 확인할 가치가 있습니다.

복구가 모호한 경우

일부 손상은 똑같이 그럴듯한 여러 수정 방식을 가질 수 있습니다. 중간에 끊긴 {"a": 1, "b": 2는 단순히 괄호만 닫아도 되지만, 실제로는 필드가 하나 더 있었다면 데이터가 손실됩니다. 복구 휴리스틱은 "가장 덜 파괴적인" 추측을 하지만, 이는 어디까지나 추측이며 보장이 아닙니다.

도구 사용해보기