programing

Python에서 다소 잘못된 JSON을 해석하는 방법은 무엇입니까?

starjava 2023. 4. 2. 09:39
반응형

Python에서 다소 잘못된 JSON을 해석하는 방법은 무엇입니까?

외부 입력 소스에서 다음 JSON 문자열이 수신됩니다.

{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}

형식이 올바르지 않은 JSON 문자열("id"와 "value"는 따옴표로 묶어야 함)입니다만, 어쨌든 해석할 필요가 있습니다.simplejson과 json-py를 사용해 봤는데, 그러한 문자열을 해석하도록 설정할 수 없는 것 같습니다.

구글 앱 엔진에서 Python 2.5를 실행하고 있기 때문에 Python-cjson과 같은 C 기반 솔루션은 적용되지 않습니다.

입력 포맷은 위의 JSON 외에 XML이나 YAML로 변경할 수 있지만, 저는 프로젝트 내에서 JSON을 사용하고 있기 때문에 특정 장소에서 포맷을 변경하는 것은 좋지 않습니다.

이제 XML로 전환하여 데이터를 성공적으로 분석했지만 JSON으로 다시 전환할 수 있는 솔루션을 기대합니다.

YAML(>=1.2)은 JSON의 슈퍼셋이므로 다음을 수행할 수 있습니다.

>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}

demjson을 사용할 수 있습니다.

>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}

문자열 파서를 사용하여 먼저 수정할 수 있습니다.이것이 JSON에서 얻을 수 있는 복잡성만큼 복잡할 경우 regex가 이를 수행할 수 있습니다.

dirtyjson 라이브러리는 거의 정확한 JSON을 처리할 수 있습니다.

>>> import dirtyjson
>>> 
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> d = dirtyjson.loads(s)
>>> d
AttributedDict([('value', '82363549923gnyh49c9djl239pjm01223'), ('id', 17893)])
>>>
>>> d = dict(d)
>>> d
{'value': '82363549923gnyh49c9djl239pjm01223', 'id': 17893}
>>> d["value"]
'82363549923gnyh49c9djl239pjm01223'
>>> d["id"]
17893

Pyparsing에는 JSON 파서의 예가 포함되어 있습니다.다음은 온라인 소스입니다.멤버명에 따옴표가 없는 문자열을 허용하도록 memberDef 정의를 변경한 후 이를 사용하여 not-quite-JSON 소스 텍스트를 해석할 수 있습니다.

[Python Magazine 2008년 8월호에는 이 파서에 대한 자세한 정보가 수록되어 있습니다.여기에는 몇 가지 샘플 JSON과 해석된 결과에 액세스하는 코드가 표시됩니다.이 코드는 역직렬화된 객체인 것처럼 표시됩니다.

언급URL : https://stackoverflow.com/questions/1931454/how-to-parse-somewhat-wrong-json-with-python

반응형