首页 > 后端开发 > Python教程 > 如何使用 Python 的 `json.JSONDecoder.raw_decode` 高效地从单个文件中提取多个 JSON 对象?

如何使用 Python 的 `json.JSONDecoder.raw_decode` 高效地从单个文件中提取多个 JSON 对象?

Mary-Kate Olsen
发布: 2024-10-29 04:48:02
原创
837 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板