从单个文件中迭代提取多个 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中文网其他相关文章!