Python에서 여러 내장 개체를 사용하여 JSON 데이터를 효율적으로 구문 분석하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-29 12:32:29
원래의
467명이 탐색했습니다.

How to Efficiently Parse JSON Data with Multiple Embedded Objects in Python?

여러 내장 개체에 대한 JSON 구문 분석 문제

이 문서에서는 여러 중첩 JSON 개체가 포함된 JSON 파일에서 데이터를 추출하는 문제를 다룹니다. 이러한 파일은 대규모 데이터세트를 처리할 때 문제가 되는 경우가 많습니다.

문제 설명

다음과 같이 여러 JSON 개체가 포함된 JSON 파일을 고려하세요.

<code class="json">{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes",
 "Code":[{"event1":"A","result":"1"},…]}
{"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No",
 "Code":[{"event1":"B","result":"1"},…]}
{"ID":"AA356","Timestamp":"20140103", "Usefulness":"No",
 "Code":[{"event1":"B","result":"0"},…]}
…</code>
로그인 후 복사

작업은 추출하는 것입니다. 각 개체의 "타임스탬프" 및 "유용성" 값을 데이터 프레임으로:

Timestamp Usefulness
20140101 Yes
20140102 No
20140103 No
... ...

솔루션 개요

이 문제를 해결하기 위해 Python에서 json.JSONDecoder.raw_decode 메서드를 사용합니다. . 이 방법을 사용하면 "스택된" JSON 개체의 큰 문자열을 디코딩할 수 있습니다. 파싱된 객체의 마지막 위치와 유효한 객체를 반환합니다. 반환된 위치를 raw_decode에 다시 전달하면 해당 지점부터 구문 분석을 재개할 수 있습니다.

구현

<code class="python">from json import JSONDecoder, JSONDecodeError
import re

NOT_WHITESPACE = re.compile(r'\S')

def decode_stacked(document, pos=0, decoder=JSONDecoder()):
    while True:
        match = NOT_WHITESPACE.search(document, pos)
        if not match:
            return
        pos = match.start()
        
        try:
            obj, pos = decoder.raw_decode(document, pos)
        except JSONDecodeError:
            # Handle errors appropriately
            raise
        yield obj

s = """

{“a”: 1}  


[
1
,   
2
]


"""

for obj in decode_stacked(s):
    print(obj)</code>
로그인 후 복사

이 코드는 문자열 s의 JSON 개체를 반복하고 각 개체를 인쇄합니다.

{'a': 1}
[1, 2]
로그인 후 복사

결론

제공된 솔루션은 단일 파일에 포함된 여러 중첩 JSON 개체에서 데이터를 추출하는 문제를 효과적으로 해결합니다. json.JSONDecoder.raw_decode 메서드를 활용하고 잠재적인 오류를 처리함으로써 대규모 데이터 세트를 효율적으로 처리할 수 있습니다. decode_stacked 함수는 이러한 파일 형식을 처리하기 위한 재사용 가능한 도구로 사용될 수 있습니다.

위 내용은 Python에서 여러 내장 개체를 사용하여 JSON 데이터를 효율적으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!