json_repair

LLM FrameworksCLIPython

★ 5,095주당 +9조회 4

무엇인가

json_repair는 문법이 깨진 JSON 문자열을 파싱 가능한 형태로 되돌리는 Python 라이브러리다. LLM 출력, API 응답, 로그, 사용자 입력처럼 엄격한 JSON 문법을 보장할 수 없는 텍스트를 다루는 파이프라인의 파싱 계층에 들어간다. 표준 라이브러리 json 모듈과 같은 자리를 차지하거나, 그 앞단의 복구 단계로 배치된다.

어떻게 동작하나

repair_json()은 먼저 표준 라이브러리 json.loads()로 엄격 파싱을 시도하고, 실패했을 때만 자체 복구 파서로 넘어간다. 복구 파서는 누락된 따옴표·쉼표·괄호를 채우고, 주석이나 JSON 밖에 붙은 산문을 제거하며, 잘린 값과 불완전한 키-값 쌍을 null이나 빈 문자열로 채운다. true/false/null과 None은 대소문자를 가리지 않고 인식하고, 쉼표로 나열된 괄호 시퀀스는 JSON 배열로 변환한다. return_objects=True를 지정하면 문자열 대신 디코딩된 객체를 반환한다.

무엇과 다른가

표준 json.loads()는 문법 오류에서 JSONDecodeError를 던지고 호출자가 예외를 처리해야 한다. json_repair는 같은 입력을 받아 복구된 문자열이나 객체를 돌려준다. json.loads()를 try/except로 감싸고 실패 시 json_repair.loads()를 호출하는 패턴은 README가 안티패턴으로 지목한다. repair_json()이 기본값으로 이미 엄격 파싱 검사를 수행하기 때문이다.

어떻게 쓰나

pip install json-repair로 설치하고 from json_repair import repair_json으로 불러온다. repair_json(bad_json_string)이 복구된 JSON 문자열을 반환한다. json_repair.loads()는 json.loads()를, json_repair.load()는 json.load()를 대체하고, from_file()은 파일 경로에서 직접 읽는다. repair_json()은 json.dumps()가 받는 인자를 그대로 전달받는다.

전제와 한계

복구가 불가능할 만큼 깨진 입력에는 빈 문자열이 반환된다. 파일 입출력에서 발생하는 OSError·IOError는 라이브러리가 잡지 않으므로 호출자가 처리해야 한다. skip_json_loads=True는 이미 무효한 입력에만 쓰는 옵션이며, 유효한 JSON을 강제로 복구 파서에 통과시키면 구조나 값이 바뀔 수 있다. 기본값에서 비라틴 문자는 \u 이스케이프로 출력되므로 ensure_ascii=False를 지정해야 원문이 보존된다.