首頁 >後端開發 >Python教學 >如何使用 Python 的 `json.JSONDecoder.raw_decode` 有效率地從單一檔案中提取多個 JSON 物件?

如何使用 Python 的 `json.JSONDecoder.raw_decode` 有效率地從單一檔案中提取多個 JSON 物件?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-29 04:48:02775瀏覽

How to Extract Multiple JSON Objects from a Single File Efficiently Using Python's `json.JSONDecoder.raw_decode`?

從單一檔案中迭代提取多個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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn