本文解決了從包含多個巢狀 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中文網其他相關文章!