← 블로그로 돌아가기

5가지 일반적인 JSON 구문 오류 및 해결 방법

개발자가 가장 자주 접하는 5가지 일반적인 오류에 대한 완벽한 가이드로 JSON 구문을 마스터하세요. 실용적인 예제와 전문가 팁으로 JSON 검증 문제를 식별, 수정 및 방지하는 방법을 배웁니다.

Big JSON Team12분 소요beginner
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

12 분 읽기

# 5가지 일반적인 JSON 구문 오류 및 해결 방법

JSON(JavaScript Object Notation)은 현대 웹 개발에서 어디에나 있습니다—API 응답에서 구성 파일까지. 간단한 구문에도 불구하고 개발자는 애플리케이션을 중단시키는 좌절스러운 JSON 오류에 지속적으로 직면합니다.

이 가이드는 가장 자주 접하게 될 5가지 가장 일반적인 JSON 구문 오류, 즉시 식별하는 방법 및 영구적으로 수정하는 방법을 다룹니다.

---

JSON 오류가 흔한 이유

JSON의 엄격한 구문 요구 사항은 잘못된 문자 하나만으로도 전체 문서를 무효화할 수 있습니다. JavaScript와 달리 JSON은:

  • ✅ 문자열에 큰따옴표 필요 (작은따옴표는 유효하지 않음)
  • 후행 쉼표 금지
  • ✅ 키와 값에 대한 정확한 형식 요구
  • 주석 허용 안 함

개발자를 가장 자주 혼란스럽게 하는 오류를 살펴보겠습니다.

---

오류 #1: 후행 쉼표(조용한 킬러)

문제

후행 쉼표—배열이나 객체의 마지막 항목 뒤에 추가 쉼표—는 JavaScript에서는 완전히 유효하지만 JSON에서는 완전히 금지됩니다.

❌ 유효하지 않은 JSON

{

"username": "alice123",

"email": "alice@example.com",

"active": true,

}

{

"products": [

{ "id": 1, "name": "Laptop" },

{ "id": 2, "name": "Mouse" },

{ "id": 3, "name": "Keyboard" },

]

}

✅ 유효한 JSON

{

"username": "alice123",

"email": "alice@example.com",

"active": true

}

{

"products": [

{ "id": 1, "name": "Laptop" },

{ "id": 2, "name": "Mouse" },

{ "id": 3, "name": "Keyboard" }

]

}

나타날 오류 메시지

Unexpected token } in JSON at position 78

SyntaxError: Trailing comma in JSON

해결 방법

수동 수정:
  • 닫는 중괄호 } 또는 대괄호 ] 앞의 쉼표를 찾습니다
  • 후행 쉼표를 제거합니다
  • JSON 린터로 검증합니다
  • 예방 팁: 후행 쉼표를 자동으로 감지하고 강조 표시하는 BigJSON과 같은 JSON 포맷터를 사용하세요. 개발자를 위한 전문가 팁:
    // 코드 편집기에서 다음 패턴을 검색:
    

    ,\s} // 닫는 중괄호 앞 쉼표

    ,\s] // 닫는 대괄호 앞 쉼표

    ---

    오류 #2: 큰따옴표 대신 작은따옴표

    문제

    JavaScript는 문자열에 작은따옴표와 큰따옴표를 모두 허용하지만 JSON은 큰따옴표만 허용합니다("). 작은따옴표를 사용하는 것은 JavaScript 객체를 JSON으로 변환할 때 가장 흔한 실수 중 하나입니다.

    ❌ 유효하지 않은 JSON

    {
    

    'name': 'John Doe',

    'age': 30,

    'city': 'New York'

    }

    {
    

    "name": 'John Doe',

    "age": 30

    }

    ✅ 유효한 JSON

    {
    

    "name": "John Doe",

    "age": 30,

    "city": "New York"

    }

    나타날 오류 메시지

    Unexpected token ' in JSON at position 2
    

    SyntaxError: Expected property name or '}' in JSON

    해결 방법

    빠른 수정:
    // JavaScript: 작은따옴표를 큰따옴표로 변환
    

    const fixedJson = invalidJson.replace(/'/g, '"');

    더 나은 접근 방식: 적절한 JSON 직렬화 사용:
    // 따옴표로 수동으로 JSON을 작성하는 대신:
    

    const wrong = "{ 'name': 'John' }"; // ❌

    // JSON.stringify() 사용:

    const obj = { name: 'John' };

    const correct = JSON.stringify(obj); // ✅ "{"name":"John"}"

    이 오류가 발생하는 경우

    • JavaScript 객체 리터럴을 복사하고 따옴표 변환을 잊음
    • 적절한 편집기 없이 수동으로 JSON 입력
    • 템플릿 리터럴을 잘못 사용

    ---

    오류 #3: 따옴표 없는 키

    문제

    JavaScript에서는 객체 키가 유효한 식별자인 경우 따옴표 없이 사용할 수 있습니다. JSON은 모든 키가 큰따옴표로 묶인 문자열이어야 합니다.

    ❌ 유효하지 않은 JSON

    {
    

    name: "Alice",

    age: 28,

    isActive: true

    }

    {
    

    user_id: 42,

    "email": "test@example.com"

    }

    ✅ 유효한 JSON

    {
    

    "name": "Alice",

    "age": 28,

    "isActive": true

    }

    {
    

    "user_id": 42,

    "email": "test@example.com"

    }

    나타날 오류 메시지

    Unexpected token n in JSON at position 4
    

    SyntaxError: Expected property name enclosed in double quotes

    해결 방법

    Visual Studio Code 사용자:
  • "JSON" 언어 확장 설치
  • 문서 포맷 (Shift + Alt + F)
  • VS Code는 따옴표 없는 키를 빨간색으로 강조 표시
  • 찾기 및 바꾸기 패턴:
    찾기:    (\w+):\s
    

    바꾸기: "$1":

    실제 예제

    // 로깅 시 흔한 실수:
    

    console.log({ status: 'success', data: result }); // 유효한 JS ✅

    // 이것을 JSON으로 저장하려고 시도:

    {

    status: "success", // ❌ 유효하지 않은 JSON

    data: { ... }

    }

    // 올바른 JSON:

    {

    "status": "success", // ✅

    "data": { ... }

    }

    ---

    오류 #4: 유효하지 않은 이스케이프 시퀀스

    문제

    JSON은 제한된 이스케이프 시퀀스를 지원합니다. 유효하지 않은 것을 사용하거나 특수 문자를 이스케이프하는 것을 잊으면 구문 분석 오류가 발생합니다.

    ❌ 유효하지 않은 JSON

    {
    

    "path": "C:\Users\Alice\Documents",

    "message": "Line 1

    Line 2"

    }

    {
    

    "quote": "He said "hello" to me"

    }

    ✅ 유효한 JSON

    {
    

    "path": "C:\\Users\\Alice\\Documents",

    "message": "Line 1\nLine 2"

    }

    {
    

    "quote": "He said \"hello\" to me"

    }

    JSON의 유효한 이스케이프 시퀀스

    | 문자 | 이스케이프 시퀀스 | 설명 |

    |-----------|----------------|-------------|

    | " | \" | 큰따옴표 |

    | \ | \\ | 백슬래시 |

    | / | \/ | 슬래시 |

    | 줄바꿈 | \n | 라인 피드 |

    | 탭 | \t | 수평 탭 |

    | 캐리지 리턴 | \r | 캐리지 리턴 |

    | 백스페이스 | \b | 백스페이스 |

    | 폼 피드 | \f | 폼 피드 |

    | 유니코드 | \uXXXX | 유니코드 문자 |

    나타날 오류 메시지

    Unexpected token in JSON at position 25
    

    SyntaxError: Invalid escape sequence

    해결 방법

    JavaScript 이스케이프:
    // 이스케이프를 자동으로 처리:
    

    const data = {

    path: "C:\\Users\\Alice",

    message: "Line 1\nLine 2"

    };

    const json = JSON.stringify(data);

    // 결과: {"path":"C:\\\\Users\\\\Alice","message":"Line 1\\nLine 2"}

    수동 경로 이스케이프:
    const windowsPath = "C:\\Users\\Alice";
    

    const jsonPath = windowsPath.replace(/\\/g, "\\\\");

    ---

    오류 #5: JSON의 주석 (JSON ≠ JavaScript!)

    문제

    개발자는 문서화를 위해 JSON 파일에 주석을 추가하는 경우가 많지만 JSON은 어떤 종류의 주석도 지원하지 않습니다. //, / / 모두 불가합니다.

    ❌ 유효하지 않은 JSON

    {
    

    // 사용자 구성

    "username": "admin",

    "role": "superuser",

    / 이것은 임시입니다

    프로덕션에서 제거 /

    "debugMode": true

    }

    ✅ 유효한 JSON (주석 허용 안 함)

    {
    

    "username": "admin",

    "role": "superuser",

    "debugMode": true

    }

    나타날 오류 메시지

    Unexpected token / in JSON at position 4
    

    SyntaxError: JSON does not support comments

    해결 방법

    옵션 1: 주석 필드 사용
    {
    

    "_comment": "사용자 구성 - 프로덕션 전에 업데이트",

    "username": "admin",

    "role": "superuser",

    "debugMode": true

    }

    옵션 2: JSON5 또는 JSONC 사용

    구성 파일의 경우 다음을 고려하세요:

    • JSON5: 주석, 후행 쉼표 등을 지원
    • JSONC: 주석이 있는 JSON (VS Code에서 사용)

    // config.json5
    

    {

    // 사용자 구성

    username: "admin", // 따옴표 불필요

    role: "superuser",

    debugMode: true, // 후행 쉼표 OK!

    }

    옵션 3: 별도의 문서 파일
    project/
    

    ├── config.json # 순수 JSON

    ├── config.README.md # 주석이 있는 문서

    ---

    보너스: JSON 오류를 조기에 발견하는 방법

    1. 온라인 검증기 사용

    BigJSON Validator - 도움이 되는 오류 메시지로 즉시 검증:
    • JSON을 붙여넣기
    • 줄별 오류 감지
    • 정확히 어디에 문제가 있는지 확인

    2. IDE 확장

    VS Code:
    • 내장 JSON 검증
    • 인라인 오류 메시지를 위한 "Error Lens" 설치

    Sublime Text:
    • JSONLint 패키지

    Atom:
    • linter-jsonlint

    3. Pre-Commit 후크

    # .git/hooks/pre-commit
    

    #!/bin/bash

    for file in $(git diff --cached --name-only | grep -E '\.json$'); do

    if ! python -m json.tool "$file" > /dev/null 2>&1; then

    echo "Invalid JSON in $file"

    exit 1

    fi

    done

    4. 자동화된 테스트

    // Jest 테스트
    

    test('config.json이 유효함', () => {

    const fs = require('fs');

    const config = fs.readFileSync('config.json', 'utf8');

    expect(() => {

    JSON.parse(config);

    }).not.toThrow();

    });

    ---

    빠른 참조: 오류 감지 체크리스트

    JSON 파일을 제출하거나 배포하기 전에 확인:

    • [ ] 마지막 항목 뒤에 후행 쉼표 없음
    • [ ] 모든 문자열에 큰따옴표 사용 (")
    • [ ] 모든 객체 키에 따옴표
    • [ ] 특수 문자가 적절히 이스케이프됨
    • [ ] 어디에도 주석 없음
    • [ ] 중괄호와 대괄호의 적절한 중첩
    • [ ] 유효한 데이터 유형 (문자열, 숫자, 부울, null, 객체, 배열)
    • [ ] 숫자에 선행 0이 없음 (0.x 제외)

    ---

    JSON 오류를 방지하는 도구

    1. BigJSON 온라인 도구

    BigJSON을 방문하여:
    • 포맷터: 포맷 문제 자동 수정
    • 검증기: 즉시 구문 확인
    • 최소화기: 프로덕션용 공백 제거

    2. 명령줄 도구

    # Node.js 내장 검증기
    

    node -e "JSON.parse(require('fs').readFileSync('file.json'))"

    # Python 검증기

    python -m json.tool file.json

    # jq (JSON 프로세서)

    jq . file.json

    3. 브라우저 개발자 도구

    // 콘솔 검증
    

    try {

    JSON.parse(jsonString);

    console.log('✅ 유효한 JSON');

    } catch (e) {

    console.error('❌ 유효하지 않음:', e.message);

    }

    ---

    일반적인 오류 메시지 해독

    | 오류 메시지 | 가능성 있는 원인 | 수정 |

    |--------------|-------------|-----|

    | Unexpected token , | 후행 쉼표 | } 또는 ] 앞의 쉼표 제거 |

    | Unexpected token ' | 작은따옴표 | 큰따옴표로 교체 |

    | Expected property name | 따옴표 없는 키 | 모든 객체 키에 따옴표 |

    | Unexpected token } | 누락된 쉼표 | 항목 사이에 쉼표 추가 |

    | Unexpected end of JSON | 닫히지 않은 중괄호/대괄호 | 중첩 확인 |

    | Invalid escape sequence | 잘못된 이스케이프 문자 | 유효한 이스케이프 사용 (\\, \n 등) |

    ---

    실제 예제: API 응답 디버깅

    여러 오류가 있는 실제 API 응답을 수정해 봅시다:

    ❌ 이전 (유효하지 않음)

    {
    

    success: true, // 오류: 따옴표 없는 키

    'message': 'Data retrieved', // 오류: 작은따옴표

    data: [

    {

    id: 1,

    name: "Product A",

    price: 29.99,

    }, // 오류: 후행 쉼표

    {

    id: 2,

    name: "Product B",

    // 참고: 특별 행사 // 오류: 주석

    price: 19.99

    }

    ], // 오류: 후행 쉼표

    }

    ✅ 이후 (유효함)

    {
    

    "success": true,

    "message": "Data retrieved",

    "data": [

    {

    "id": 1,

    "name": "Product A",

    "price": 29.99

    },

    {

    "id": 2,

    "name": "Product B",

    "price": 19.99

    }

    ]

    }

    ---

    워크플로에서 오류 방지

    개발자용

    // 수동 연결 대신 항상 JSON.stringify() 사용
    

    const config = {

    apiKey: process.env.API_KEY,

    timeout: 5000

    };

    // ❌ 수동 (오류 발생 가능)

    const json = '{ "apiKey": "' + config.apiKey + '", "timeout": ' + config.timeout + ' }';

    // ✅ 자동 (안전)

    const json = JSON.stringify(config);

    구성 파일용

  • 편집기에서 엄격한 검증 사용
  • 린팅 규칙 설정
  • CI/CD 파이프라인에 검증 추가
  • 빌드 프로세스의 일부로 JSON 파일 테스트
  • API 응답용

    // Express.js 예제
    

    app.get('/api/data', (req, res) => {

    const data = { status: 'ok', results: [...] };

    // ❌ 수동 문자열 빌드

    res.send('{"status":"' + data.status + '"}');

    // ✅ 자동 JSON 직렬화

    res.json(data); // 이스케이프, 따옴표 등 처리

    });

    ---

    결론

    5가지 가장 일반적인 JSON 구문 오류는:

  • 후행 쉼표 - }] 앞의 쉼표 제거
  • 작은따옴표 - 항상 큰따옴표 사용 (")
  • 따옴표 없는 키 - 모든 객체 키에 따옴표
  • 유효하지 않은 이스케이프 - 적절한 이스케이프 시퀀스 사용
  • 주석 - 모든 주석 제거 (필요한 경우 JSON5 사용)
  • 기억하세요: JSON은 JavaScript가 아닙니다! 엄격한 구문은 유연성을 허용하지 않습니다.

    다음 단계

  • JSON 검증: BigJSON Validator 사용
  • 자동 포맷: BigJSON Formatter 사용
  • 더 배우기: 완전한 JSON 가이드 읽기
  • JSON 오류에 대한 질문이 있으신가요? 아래에 댓글을 남겨주세요!

    ---

    관련 리소스

    ---

    최종 업데이트: 2026년 2월 15일
    Share:

    관련 글

    Read in English