파이썬 JSON 설정 읽기: 중복 키와 NaN을 조용히 허용하지 않는 방법
JSON 설정의 중복 키는 object_pairs_hook으로, NaN·Infinity는 parse_constant로 거부하고 자료형 검증은 별도로 수행하세요. 확인일: 2026-10-24. Python 3.14 표준 라이브러리 예제입니다. Windows Python 3.14.4에서 합성 입력으로 로컬 실행과 assert 검사를 통과했습니다. 문법이 맞는데 설정값이 달라지는 이유는 무엇인가요? 같은 JSON 객체에 retry가 두 번 있으면 Python의 기본 디코더는 마지막 값을 남길 수 있습니다. 작성자가 의도하지 않은 값으로 설정이 바뀌어도 파싱 자체는 성공합니다. 이 글은 이미 읽은 사전에서 누락 키를 찾는 문제가 아니라, 사전으로 만들기 전에 중복 이름을 발견하는 문제를 다룹니다. 두 가지 훅은 각각 무엇을 검사하나요? object_pairs_hook은 각 JSON 객체의 이름·값 쌍 목록을 받아 객체로 바꿉니다. unique_object에서 이미 본 이름이 나오면 고정 메시지의 ValueError를 냅니다. 중첩 객체에도 적용됩니다. parse_constant는 NaN, Infinity, -Infinity 같은 비표준 숫자 표기를 만났을 때 거부하도록 설정합니다. 따옴표로 감싼 "NaN"은 평범한 문자열이므로 이 예제에서는 허용합니다. 합성 입력으로 정상과 오류를 나눕니다 아래 read_config는 최상위 값이 객체인지도 확인합니다. 정상 설정과 중첩 true 값을 읽은 뒤, 같은 객체의 중복 이름·중첩 중복·비표준 숫자 상수·최상위 배열·마지막 쉼표를 검사합니다. 일반 문법 오류의 JSONDecodeError도 ValueError의 하위 클래스라 같은 테스트에서 잡힙니다. 실제 회사 설정이나 외부 API는 읽지 않습니다. import json def unique_object(pairs): result = {} for key, value in pairs: if key in result: ...