如何在Python中高效解析多个嵌入对象的JSON数据?

Patricia Arquette
发布: 2024-10-29 12:32:29
原创
467 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!