JSON 파일을 가져오지 못할 때: 쉼표·따옴표·주석 확인하기

직접 만든 JSON 예제7개로 문법 오류를 비교했습니다. 마지막 쉼표와 빠진 쉼표를 구분하고, JSON과 주석을 허용하는 설정 파일의 차이를 확인하세요.

뒤로가기

파일은 열리는데 가져오기는 실패하나요?

설정이나 자료를 JSON 파일로 가져오려는데 오류가 날 수 있습니다. JSON은 이름과 값을 일정한 규칙으로 적는 텍스트 형식입니다. 메모장에서 글자가 보이더라도 그 규칙을 어기면 가져오기에 실패할 수 있습니다.

먼저 원본을 복사해 두세요. 이 글은 일반 JSON의 문법 오류를 찾는 순서입니다. 프로그램이 요구하는 항목이나 값까지 검사하는 방법은 아닙니다. 오류에 나온 파일 이름도 확인하세요. 지금 수정한 파일과 실제로 가져오는 파일이 다를 수 있습니다.

같은 내용을 예제7개로 비교했습니다

2026년10월22일에 가상의 모임 이름과 인원으로 파일7개를 만들었습니다. 모두 UTF-8로 저장했습니다. 파일 맨 앞의 인코딩 표시(BOM)는 넣지 않았습니다. 저장된 파일의 본문을 Node.js와 Chromium의 JSON.parse에 넣었습니다. JSON.parse는 텍스트를 JSON 규칙에 따라 읽는 JavaScript 기능입니다. 특정 앱에 파일을 가져오는 실험은 아닙니다.

예제 파일 바꾼 부분 두 실행 환경의 결과
valid.json 정상 예제, 들여쓰기 사용 성공
compact.json 들여쓰기와 항목 사이 줄바꿈 제거 성공
trailing-comma.json 마지막 값 뒤에 쉼표 추가 문법 오류
single-quotes.json 큰따옴표를 작은따옴표로 변경 문법 오류
comment.json 항목 사이에 주석 추가 문법 오류
missing-comma.json 항목 사이 쉼표 제거 문법 오류
curly-quotes.json 따옴표를 곡선 모양으로 변경 문법 오류

파일 링크는 브라우저에서 본문이 바로 보일 수 있습니다. 내려받아 비교하려면 링크의 ‘다른 이름으로 링크 저장’을 사용하세요. 모바일에서는 링크를 길게 눌러 저장 메뉴를 확인하세요. 표와 코드 블록이 잘리면 블록 안에서 좌우로 넘겨 확인하세요.

성공한 두 파일은 다음과 같은 값을 담고 있습니다. 아래 내용은 가상 예제이며 실제 앱의 설정으로 넣는 자료가 아닙니다.

{
	"name": "오후 모임",
	"count": 3
}

들여쓰기와 항목 사이 줄바꿈이 없어도 두 파일에서 읽은 이름과 인원은 같았습니다. 보기 좋은 줄 맞춤과 문법 통과는 다른 문제입니다. 다만 따옴표 안의 공백이나 \n 같은 줄바꿈 표시는 값의 일부이므로 함부로 지우지 마세요. 문자열 안에서 실제로 줄을 바꾸면 문법 오류입니다. 줄바꿈 값은 \n처럼 적어야 합니다.

실제 오류 문구와 실행 버전은 원본 측정 기록에 담았습니다. 오류 메시지의 표현은 프로그램과 버전에 따라 달라질 수 있습니다. 메시지 전체가 예제와 똑같아야 같은 원인인 것은 아닙니다.

쉼표는 ‘항목 사이’에만 넣으세요

이름과 인원이라는 두 항목 사이에는 쉼표가 필요합니다. 마지막 항목 뒤, 닫는 } 바로 앞에는 넣지 않습니다. 배열에서도 마지막 값과 닫는 ] 사이에 쉼표를 넣지 않습니다.

실패한 두 예제의 핵심 부분을 비교해 보세요.

마지막 쉼표가 있음: {"name":"오후 모임","count":3,}
중간 쉼표가 없음: {"name":"오후 모임" "count":3}
수정한 결과: {"name":"오후 모임","count":3}

마지막 쉼표 예제에서는 3 뒤의 쉼표만 지웠습니다. 중간 쉼표 예제에서는 "오후 모임" 뒤에 쉼표를 넣었습니다. 중간 쉼표가 없는 예제의 오류는 빠진 쉼표 다음 항목인 "count"의 시작을 가리켰습니다. 각각 수정한 뒤 두 환경에서 정상 값을 읽는 것을 확인했습니다. MDN의 JSON.parse 안내에서도 마지막 쉼표를 허용하지 않는 예를 볼 수 있습니다.

쉼표를 모두 지우는 식으로 고치지 마세요. 항목 사이의 쉼표가 사라집니다. "서울, 부산"처럼 따옴표 안의 쉼표는 글자 값의 일부입니다.

따옴표의 모양과 주석을 확인하세요

JSON에서 이름과 문자열 값은 곧은 큰따옴표 "로 감쌉니다. 작은따옴표 '나 문서 편집기가 만든 곡선 따옴표 “ ”로 대체하면 안 됩니다. 숫자 3은 따옴표 없이 적을 수 있습니다. "3"으로 바꾸면 숫자가 아니라 글자 값이 됩니다.

작은따옴표: {'name':'오후 모임','count':3}
곡선 따옴표: {“name”:“오후 모임”,“count”:3}
정상 예제: {"name":"오후 모임","count":3}

이 실험에서는 이름과 값의 바깥 따옴표를 고쳐 정상 값을 읽었습니다. 실제 파일에서 작은따옴표를 전부 바꾸지는 마세요. 문자열 내용에 들어간 작은따옴표까지 훼손할 수 있습니다.

일반 JSON에는 // 설명이나 /* 설명 */ 형태의 주석을 넣을 수 없습니다. 예제의 /* 참가 인원 */을 지우니 문법 오류가 사라졌습니다. 다만 "https://example.com"의 //는 문자열의 일부입니다. 주석이라고 지우면 주소가 망가집니다. 이름과 항목 구분 규칙은 JSON 표준 RFC 8259의 객체 설명, 따옴표와 줄바꿈 표기는 같은 표준의 문자열 설명을 기준으로 확인했습니다.

설정 파일에 주석이 들어 있던데요?

프로그램에 따라 주석을 허용하는 별도 형식을 씁니다. VS Code의 settings.json 같은 설정은 JSON with Comments, 즉 주석을 허용하는 모드로 다룹니다. VS Code 공식 안내에 따르면 이 모드는 마지막 쉼표도 받아들이지만 경고를 표시합니다.

따라서 확장자가 .json이라는 이유만으로 모든 설정의 주석을 지우지 마세요. 먼저 해당 앱의 파일 규칙을 확인하세요. 이 글의 비교는 일반 JSON을 읽는 JSON.parse의 결과입니다. VS Code의 JSON with Comments 설명에서 차이를 확인할 수 있습니다.

내 파일은 이 순서로 고치세요

  1. 원본을 복사하고, 오류 메시지의 파일 이름을 적으세요. 줄 번호나 글자 위치가 나오면 함께 적으세요.
  2. 앱 안내에서 일반 JSON을 요구하는지 확인하세요. 주석을 허용하는 설정이라면 그 앱의 규칙을 따르세요.
  3. 일반 JSON이라면 오류 줄과 바로 앞줄을 함께 보세요. 앞 항목의 쉼표 누락이 뒤 항목에서 오류로 표시될 수 있습니다.
  4. 마지막 쉼표·빠진 쉼표·따옴표 모양·주석을 하나씩 확인하세요. 수정할 때마다 저장하세요. 파일을 고르는 앱에서는 수정한 복사본을 다시 선택하세요. 정해진 경로의 설정을 읽는 앱에서는 원본을 백업한 뒤 그 경로의 파일을 수정하세요.
  5. 문법 오류가 사라졌는데도 실패하면 필수 항목과 값의 종류를 확인하세요. 예를 들어 숫자 3을 요구하는 자리에 글자 "3"을 넣었을 수 있습니다. 정확한 조건은 해당 앱의 안내와 비교하세요.

이미 VS Code가 있다면 복사본을 열어 오류 밑줄을 확인할 수도 있습니다. 2단계에서 일반 JSON을 요구한다고 확인한 파일에만 다음 절차를 적용하세요. 아래쪽 상태 표시줄의 언어 모드를 눌러 일반 JSON을 선택하세요. 오류 밑줄이 표시된 부분을 한 곳씩 고치세요. 검증 기능을 꺼 두었다면 표시되지 않을 수 있습니다. 이 편집기 절차는 공식 JSON 편집 안내를 확인해 적었으며, 이번 실험에서 VS Code 화면을 직접 실행하지는 않았습니다.

문법을 통과한 파일도 앱의 필수 항목이 없으면 거절될 수 있습니다. 예제7개는 쉼표와 따옴표 등을 구분하기 위한 자료입니다. 실제 앱의 가져오기 성공 여부를 보장하지 않습니다.

같은 비교를 다시 실행하려면

Node.js 24와 Git이 있는 개발 환경에서 다음 순서로 실행하세요. 새 폴더에 저장소를 내려받고 필요한 패키지와 실험용 Chromium을 설치합니다.

git clone https://github.com/hjh3311504/hjh3311504.github.io.git
cd hjh3311504.github.io
npm ci
npx playwright install chromium
node scripts/generate_blog_json_examples.js

예제 생성 스크립트는 static/downloads/blog/json-syntax/의 예제7개와 측정 기록을 만듭니다. 다시 실행하면 측정 일시와 실행 환경이 바뀝니다. 실패 예제5개의 수정 결과도 정상 예제와 같은 값인지 검사합니다. 외부 사이트로 파일을 보내지는 않습니다.