본문으로 건너뛰기
jsonbeautifiers
한국어
V8 Node v24.15.0, V8 13.6.233.17에서 파서를 실행해 확인했습니다.

Expected property name or '}' in JSON at position N (line L column C)

파서가 객체를 열고 큰따옴표로 감싼 키나 닫는 중괄호 중 하나를 기다렸는데, 다른 것이 왔습니다. 실제 데이터에서 그 "다른 것"은 거의 언제나 작은따옴표이거나 맨 식별자입니다. 즉 그 텍스트는 JSON이 아니라 파이썬 dict의 repr이거나 JavaScript 객체 리터럴이라는 뜻입니다.

JSON을 붙여넣고 어디서 깨지는지 정확히 확인하기

입력

붙여 넣은 것은 여러분의 브라우저를 떠나지 않습니다. connect-src 허용 목록 덕분에 이는 약속이 아니라 브라우저가 강제하는 보장입니다. 직접 확인하기

실제 원인

어느 쪽이 답인 경우가 많은지, 그 순서대로 정리했습니다.

  1. 01 str()로 출력한 파이썬 dict에서 온 작은따옴표 키

    print(my_dict)와 str(my_dict)가 만들어 내는 것은 JSON이 아니라 파이썬 문법입니다. 작은따옴표가 쓰이고 true, false, null 대신 True, False, None이 나옵니다. JSON을 만들려면 json.dumps를 쓰세요.

    깨지는 예

    {'name': 'Priya', 'active': True}

    되는 예

    {"name": "Priya", "active": true}
  2. 02 JavaScript 객체 리터럴에서 온 따옴표 없는 키

    JavaScript는 맨 식별자를 키로 쓸 수 있습니다. JSON은 안 됩니다. 그 키가 완벽하게 유효한 식별자라도 마찬가지입니다.

    깨지는 예

    { name: "Priya", role: "admin" }

    되는 예

    { "name": "Priya", "role": "admin" }
  3. 03 설정 파일 안의 주석

    JSON에는 주석 문법이 없습니다. 객체 안의 //나 /*는 여기로 떨어집니다.

  4. 04 워드프로세서에서 온 둥근 따옴표

    Word, 구글 문서, 메모, 여러 채팅 클라이언트의 자동 교정이 곧은 따옴표를 둥근 따옴표로 바꿉니다. JSON 파서에게 둥근 따옴표는 문자열 구분자가 아니라 그냥 문자입니다. 저희 검증기는 일반적인 "예기치 않은 토큰" 대신 그 문자를 콕 집어 알려 줍니다.

다른 런타임에서의 같은 실수

밑바탕의 문제는 똑같고, 다른 건 문구뿐입니다. 동료가 이 중 하나를 들고 왔다면, 그 사람이 보고 있는 건 여러분이 보는 것과 같습니다.

Python Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Java (Jackson) Unexpected character ('s' (code 115)): was expecting double-quote to start field name

자주 묻는 질문

파이썬 dict에서 JSON을 제대로 만들려면?
json.dumps(obj)가 JSON 문자열을 돌려줍니다. str(obj)와 print(obj)가 돌려주는 건 겉모습만 비슷한 파이썬 문법입니다. 실제로 돌아다니는 잘못된 JSON의 가장 흔한 출처 중 하나입니다.
파이썬 dict의 repr을 JSON으로 바꿀 수 있나요?
있습니다. ast.literal_eval이 안전하게 파이썬 객체로 파싱해 주고, 그다음 json.dumps를 통과시키면 됩니다. 저희 복구 도구도 같은 일을 브라우저에서 하며, 작은따옴표와 True·False·None 리터럴을 한 번에 변환합니다.

지금 고치기

위의 도구에 페이로드를 붙여넣거나, 이 일을 위해 만들어진 도구로 바로 가세요.

유효한 JSON으로 변환