gpt4 book ai didi

python - 解析不完整的json数组

转载 作者:太空狗 更新时间:2023-10-30 01:18:12 25 4
gpt4 key购买 nike

我下载了一个 5MB 的非常大的 json 文件。由此,我需要能够加载那 5MB 以生成 json 文件的预览。但是,该文件可能不完整。下面是它的外观示例:

[{
"first": "bob",
"address": {
"street": 13301,
"zip": 1920
}
}, {
"first": "sarah",
"address": {
"street": 13301,
"zip": 1920
}
}, {"first" : "tom"

从这里开始,我想“重建它”以便它可以解析前两个对象(并忽略第三个)。

有没有json解析器可以推断或者截断字符串的末尾使其可解析?或者也许是“流式传输”json 数组的解析,以便当它在最后一个对象上失败时,我可以退出循环?如果不是,如何实现上述目标?

最佳答案

如果您的数据看起来总是有些相似,您可以这样做:

import json

json_string = """[{
"first": "bob",
"address": {
"street": 13301,
"zip": 1920
}
}, {
"first": "sarah",
"address": {
"street": 13301,
"zip": 1920
}
}, {"first" : "tom"
"""

while True:
if not json_string:
raise ValueError("Couldn't fix JSON")
try:
data = json.loads(json_string + "]")
except json.decoder.JSONDecodeError:
json_string = json_string[:-1]
continue
break

print(data)

这假设数据是一个字典列表。一步一步地,最后一个字符被删除并附加了一个丢失的 ] 。如果新字符串可以解释为 JSON,无限循环就会中断。否则删除下一个字符,依此类推。如果没有剩余字符,则引发 ValueError("Couldn't fix JSON")

对于上面的例子,它打印:

[{'first': 'bob', 'address': {'zip': 1920, 'street': 13301}}, {'first': 'sarah', 'address': {'zip': 1920, 'street': 13301}}]

关于python - 解析不完整的json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53937434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com