
Python의 json.loads()는 같은 객체에 같은 키가 두 번 있어도 기본 설정에서는 오류를 내지 않고 마지막 값만 남깁니다. 중복을 발견했을 때 입력을 거절하려면 object_pairs_hook에 검사 함수를 넣으세요. 아래 코드는 가상의 금액 JSON으로 기본 결과와 검사 실패를 바로 비교합니다.
준비물은 Python과 표준 라이브러리 json뿐이며 추가 설치는 없습니다. 2026년 10월 13일 CPython 3.12.14에서 직접 실행했고, 동작 설명은 Python 3.13 공식 문서와 대조했습니다. 다른 버전·라이브러리는 사용 환경에서 확인하세요.
{"총액":10000,"총액":100000}을 기본 방식으로 읽으면 결과는 {'총액': 100000}입니다. 앞의 10000은 결과 딕셔너리에 남지 않습니다. 실제 주문이나 AI의 출력 기록이 아닌, 차이를 확인하려고 만든 합성 예시입니다.
이 동작은 Python 공식 문서의 Repeated Names Within an Object에 명시돼 있습니다. JSON 표준인 RFC 8259 §4는 한 객체 안의 이름이 유일해야 한다고 권고하지만, 중복을 받은 모든 구현이 같은 결과를 낸다고 보장하지 않습니다.

문서 코드의 0BSD 라이선스로 이용한 공식 예제이며, 아래의 직접 실행 결과와 구분한 참고 자료입니다.
아래 코드를 duplicate_check.py로 저장한 뒤 터미널에서 python duplicate_check.py로 실행하세요. 환경에 따라 명령 이름은 python3입니다.
import json
def reject_duplicate_keys(pairs):
data = {}
for key, value in pairs:
if key in data:
raise ValueError(f"중복 키: {key}")
data[key] = value
return data
raw = '{"총액":10000,"총액":100000}'
print("기본 결과:", json.loads(raw))
try:
result = json.loads(raw, object_pairs_hook=reject_duplicate_keys)
except ValueError as error:
print("검사 실패:", error)
else:
print("검사 통과:", result)
실행 결과는 다음과 같습니다.
기본 결과: {'총액': 100000}
검사 실패: 중복 키: 총액
두 번째 줄은 앞서 작성한 검사 함수가 ValueError를 일으켜 해당 입력을 거절했다는 뜻입니다. 예제에서는 결과를 보여주려고 예외를 잡아 출력했습니다. 실제 처리 코드에서는 이 실패 건을 정상 저장 단계로 넘기지 않아야 합니다.
object_pairs_hook는 각 객체의 이름·값 쌍 목록을 함수에 전달합니다. 중복 정보가 딕셔너리에서 사라지기 전에 검사하는 방식입니다. 중첩 객체에도 적용되며, 같은 객체에서 같은 값으로 키를 반복해도 거절합니다. 서로 다른 객체에 총액이 하나씩 있는 것은 허용합니다.
위 코드의 raw 한 줄만 다음으로 바꿔 다시 실행하세요.
raw = '{"총액":10000,"배송비":3000}'
이번에는 두 번째 줄이 다음처럼 나옵니다.
검사 통과: {'총액': 10000, '배송비': 3000}
통과는 이 검사에서 중복 키를 발견하지 않았다는 뜻입니다. 총액이 필수인지, 숫자인지, 배송비를 포함한 합계가 맞는지는 별도 규칙으로 확인해야 합니다. 이미 딕셔너리로 변환한 데이터에서는 앞서 사라진 중복을 복원할 수 없으므로 원본 JSON 문자열을 읽는 단계에 검사를 넣으세요.
먼저 위의 중복 입력과 정상 입력을 각각 실행해 두 결과가 구분되는지 확인해 보세요.
| AI 업무 자동화 설계법: 프롬프트에서 검수·재작업까지 (0) | 2026.10.13 |
|---|---|
| ChatGPT에서 AI 영상 만들기, Pollo MCP 연결부터 비용 확인까지 (0) | 2026.10.12 |
| FilmCraft 무료 다운로드, AI 편집 전에 확인할 3가지 (0) | 2026.10.12 |
| ChatGPT가 Drive 파일을 찾았다면, 본문도 읽었는지 확인하세요 (0) | 2026.10.10 |
| AI가 준 엑셀 수식, 세 행부터 확인하세요 (0) | 2026.10.10 |