이 간단한 패키지는 유효하지 않은 JSON 문자열을 수정하는 데 사용될 수 있습니다. 이 패키지가 작동하는 모든 사례를 알고 있으려면 단위 테스트를 확인하십시오.
이 라이브러리가 유용하다고 생각되면 월간 맥주 예산에 기부하여 도움을 줄 수 있습니다. https://github.com/sponsors/mangiucugna
이 라이브러리가 특정 문제를 해결하는지 확실하지 않거나 단순히 온라인으로 JSON을 검증하려면 https://mangiucugna.github.io/json_repair/에서 데모 사이트를 방문 할 수 있습니다.
또는 모듈 소개를 위해 Google 노트북의 오디오 깊은 곳에서 생성되는 소리를 듣습니다.
일부 LLM은 잘 형성된 JSON 데이터를 반환 할 때 약간 만약입니다. 때로는 괄호를 건너 뛰고 때로는 LLM이하는 일이기 때문에 일부 단어를 추가합니다. 운 좋게도 LLM이 저지르는 실수는 콘텐츠를 파괴하지 않고 수정하기에 충분히 간단합니다.
이 문제를 해결할 수는 있지만 찾을 수없는 경량 파이썬 패키지를 검색했습니다.
그래서 나는 하나를 썼습니다
내 작업의 일부로 우리는 OpenAI API를 사용하며 구조화 된 출력을 사용하더라도 결과는 완전히 유효한 JSON이 아니라는 것을 알았습니다. 그래서 우리는 여전히이 라이브러리를 사용하여 그 이상치를 다루고 있습니다.
PIP로 라이브러리를 설치하십시오
pip install json-repair
그런 다음 이와 같이 코드에서 사용할 수 있습니다.
from json_repair import repair_json
good_json_string = repair_json(bad_json_string)
# If the string was super broken this will return an empty string
이 라이브러리를 사용하여 json.loads()
완전히 바꿀 수 있습니다.
import json_repair
decoded_object = json_repair.loads(json_string)
아니면 그냥
import json_repair
decoded_object = json_repair.repair_json(json_string, return_objects=True)
이 라이브러리의 일부 사용자는 다음 패턴을 채택합니다.
obj = {}
try:
obj = json.loads(string)
except json.JSONDecodeError as e:
obj = json_repair.loads(string)
...
json_repair
JSON이 유효 한 경우 이미 귀하를 확인할 수 있기 때문에 낭비됩니다. 여전히 수행하려면 아래 섹션에서 설명 된대로 skip_json_loads=True
추가하십시오.
JSON 수리는 json.load()
에 대한 드롭 인 교체도 제공합니다.
import json_repair
try:
file_descriptor = open(fname, 'rb')
except OSError:
...
with file_descriptor:
decoded_object = json_repair.load(file_descriptor)
파일에서 읽을 수있는 또 다른 방법 :
import json_repair
try:
decoded_object = json_repair.from_file(json_file)
except OSError:
...
except IOError:
...
도서관은 IO 관련 예외를 포착하지 않으며 귀하가 관리해야합니다.
비 라틴 캐릭터 (예 : 중국어, 일본어 또는 한국어)와 함께 작업 할 때는 출력에서 비 라틴 문자를 보존하기 위해 ensure_ascii=False
repair_json()
에 전달해야합니다.
다음은 한자를 사용하는 예입니다.
repair_json("{'test_chinese_ascii':'统一码'}")
돌아올 것입니다
{"test_chinese_ascii": "u7edfu4e00u7801"}
대신 ensure_ascii=False
전달합니다.
repair_json("{'test_chinese_ascii':'统一码'}", ensure_ascii=False)
돌아올 것입니다
{"test_chinese_ascii": "统一码"}
json.loads()
사용하기 때문에이 라이브러리를 너무 느리게 찾으면 skip_json_loads=True
tro repair_json
통과시켜 건너 뛸 수 있습니다. 좋다:
from json_repair import repair_json
good_json_string = repair_json(bad_json_string, skip_json_loads=True)
외부 의존성을 피하기 위해 빠른 JSON 라이브러리를 사용하지 않도록 선택했습니다.
사용할 경험 규칙 :
return_objects=True
설정 파서가 이미 객체를 반환하고 해당 객체를 JSON에 직렬화하지 않기 때문에 항상 더 빠릅니다.skip_json_loads
문자열이 유효한 JSON이 아니라는 것을 100% 알고있는 경우에만 더 빠릅니다.r"string with escaping""
다음과 같이 명령 줄 라이브러리를 설치하십시오.
pipx install json-repair
사용 가능한 모든 옵션을 알기 위해 :
$ json_repair -h
usage: json_repair [-h] [-i] [-o TARGET] [--ensure_ascii] [--indent INDENT] filename
Repair and parse JSON files.
positional arguments:
filename The JSON file to repair
options:
-h, --help show this help message and exit
-i, --inline Replace the file inline instead of returning the output to stdout
-o TARGET, --output TARGET
If specified, the output will be written to TARGET filename instead of stdout
--ensure_ascii Pass ensure_ascii=True to json.dumps()
--indent INDENT Number of spaces for indentation (Default 2)
이 라이브러리를 주요 버전에서만 고정하십시오!
우리는 TDD와 엄격한 시맨틱 버전을 사용하며, 자주 업데이트되며 사소한 및 패치 버전의 변화가 없을 것입니다. requirements.txt
에서이 라이브러리의 주요 버전 만 고정하려면 패키지 이름과 메이저 버전과 마이너 및 패치 버전의 와일드 카드를 지정하십시오. 예를 들어:
json_repair==0.*
이 예에서 0.
으로 시작하는 모든 버전은 허용되므로 마이너 및 패치 버전에 대한 업데이트가 가능합니다.
당신이 당신의 학업 에서이 도서관을 사용하고 있다면 (많은 사람들이 알고 있듯이) 여기에서 bibtex를 찾으십시오.
@software{Baccianella_JSON_Repair_-_2024,
author = {Baccianella, Stefano},
month = aug,
title = {{JSON Repair - A python module to repair invalid JSON, commonly used to parse the output of LLMs}},
url = {https://github.com/mangiucugna/json_repair},
version = {0.28.3},
year = {2024}
}
내 작품을 인용해 주셔서 감사합니다. 가능하다면 종이에 대한 링크를 보내주세요!
이 모듈은 BNF 정의에 따라 JSON 파일을 구문 분석합니다.
<json> ::= <primitive> | <container>
<primitive> ::= <number> | <string> | <boolean>
; Where:
; <number> is a valid real number expressed in one of a number of given formats
; <string> is a string of valid characters enclosed in quotes
; <boolean> is one of the literal strings 'true', 'false', or 'null' (unquoted)
<container> ::= <object> | <array>
<array> ::= '[' [ <json> *(', ' <json>) ] ']' ; A sequence of JSON values separated by commas
<object> ::= '{' [ <member> *(', ' <member>) ] '}' ; A sequence of 'members'
<member> ::= <string> ': ' <json> ; A pair consisting of a name, and a JSON value
무언가 잘못된 경우 (예를 들어 누락 된 괄호 또는 따옴표) JSON 문자열을 수정하기 위해 간단한 휴리스틱을 사용합니다.
코너 케이스가 누락 될 것이라고 확신합니다. 예제가 있으면 문제를 열거나 PR을 더 잘 밀어 넣으십시오.
requirements.txt
있는 가상 환경을 만듭니다 .txt에서 설정은 사전 커미트를 사용하여 모든 테스트가 실행되도록합니다.
새로운 커밋을 추진 한 후 실행되는 Github 작업도 실패하지 않도록하십시오.
이 저장소에 대한 소유자 액세스가 필요합니다
semver
표기법을 사용하여 pyproject.toml
편집하고 버전 번호를 적절하게 업데이트하십시오.python -m build
실행하십시오