本文解决了从包含多个嵌套 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中文网其他相关文章!