從單一檔案中迭代提取多個JSON 物件
處理包含多個JSON 物件的JSON 檔案時,找到一種有效的方法至關重要從每個物件中提取特定的資料元素。
一種方法是利用 Python 的 json.JSONDecoder.raw_decode 函式。此函數可讓您解碼包含多個物件的大型 JSON 字串,即使它們沒有包裝在根數組中。
首先,您需要從 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 error raise yield obj</code>
使用此方法,您可以解碼 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>
您的程式碼可以使用以下循環來提取「時間戳記」和「有用性」值:
<code class="python">import pandas as pd data = [] for obj in decode_stacked(json_string): data.append([obj["Timestamp"], obj["Usefulness"]]) df = pd.DataFrame(data, columns=["Timestamp", "Usefulness"])</code>
This方法提供了一種靈活有效的方法來從單一檔案中提取多個JSON 對象,可讓您將複雜JSON 結構中的資料收集為表格格式。
以上是如何使用 Python 的 `json.JSONDecoder.raw_decode` 有效率地從單一檔案中提取多個 JSON 物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!