首頁 >後端開發 >Python教學 >如何在Python中高效率解析多個嵌入物件的JSON資料?

如何在Python中高效率解析多個嵌入物件的JSON資料?

Patricia Arquette
Patricia Arquette原創
2024-10-29 12:32:29520瀏覽

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中文網其他相關文章!

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