python - 解析不完整的json数组
问题描述
我已经下载了 5MB 的非常大的 json 文件。由此,我需要能够加载 5MB 以生成 json 文件的预览。但是,该文件可能不完整。以下是它的外观示例:
[{
"first": "bob",
"address": {
"street": 13301,
"zip": 1920
}
}, {
"first": "sarah",
"address": {
"street": 13301,
"zip": 1920
}
}, {"first" : "tom"
从这里开始,我想“重建它”,以便它可以解析前两个对象(并忽略第三个对象)。
是否有一个 json 解析器可以infer
或切断字符串的结尾以使其可解析?或者也许要“流式传输”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}}]
推荐阅读
- r - Geom_point 和 ggboxplot 以及 ggpair 在 ggplot 中错误地匹配了所有绘图点
- python - 通过 python 请求上传图像时出现错误 400(错误请求)
- swift - 如何解决每 14 天在设备上发生的间歇性崩溃?
- mysql - IntegerField 不接受负数 django
- python - 如何为并发请求分析我的 API?
- python - 在在线 Jupyter Notebook 上打开 .csv
- python - Pandas 解析文本数据并根据条件对齐列
- javascript - 从表格单元格值动态生成 img src
- mongoose - 不支持的投影选项:numberOfPersons:{描述:1}
- c# - 可以在 ac# 应用程序中使用 Meshlab dll (filter_unsharp)