본문으로 건너뛰기
jsonbeautifiers
한국어
Python CPython 3.14.3에서 파서를 실행해 확인했습니다.

Expecting property name enclosed in double quotes: line L column C (char N)

파서가 객체 안에 있고 큰따옴표로 감싼 키를 기다렸는데 다른 것이 왔습니다. 작은따옴표, 맨 낱말, 또는 옛 파이썬에서는 끝쉼표입니다. JSON은 키가 큰따옴표 문자열이어야 한다고 요구하며, 식별자처럼 보이는 키에도 예외는 없습니다.

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

입력

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

실제 원인

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

  1. 01 직렬화가 아니라 출력된 파이썬 dict

    str(d)와 print(d)는 작은따옴표를 만듭니다. 이 오류의 출처로 압도적으로 흔한 경우입니다.

    깨지는 예

    data = str({'a': 1})
    json.loads(data)

    되는 예

    data = json.dumps({'a': 1})
    json.loads(data)
  2. 02 윈도우에서의 AWS·Azure CLI 따옴표 처리

    PowerShell과 cmd는 POSIX 셸과 다르게 따옴표를 다뤄서, 명령줄에 그대로 쓴 JSON 인자가 큰따옴표가 벗겨진 채 CLI에 도착합니다. 확실한 해결은 셸과 싸우는 대신 JSON을 파일에 두고 file://params.json을 넘기는 것입니다.

    깨지는 예

    aws dynamodb query --key-condition-expression "{\"id\": ...}"

    되는 예

    aws dynamodb query --cli-input-json file://params.json
  3. 03 파이썬 3.12 이하에서의 끝쉼표

    3.13 이전에는 끝쉼표가 이 메시지를 냈습니다. 3.13부터는 전용 메시지 "Illegal trailing comma before end of object"가 나옵니다. 버전을 언급하지 않는 안내를 보고 있다면, 눈앞의 화면과 안 맞는 이유가 이것입니다.

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

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

JavaScript (V8) Expected property name or '}' in JSON at position 1 (line 1 column 2)

자주 묻는 질문

파이썬 dict의 repr을 고쳐 쓰지 않고 파싱할 수 있나요?
ast.literal_eval이 안전하게 처리합니다. eval과 달리 임의의 코드를 실행하지 않고 파이썬의 리터럴 문법만 평가합니다. 진짜 JSON이 필요하면 그 결과를 json.dumps에 넘기세요.

지금 고치기

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

작은따옴표를 JSON으로 변환