【发布时间】:2021-07-15 17:12:25
【问题描述】:
在我的数据管道结束时,当我最终将 Python dict 推送到 JSON 文件以由 API 按需拉取时,我会将 dict 转储到文件中,如下所示:
json.dump(data, out_file)
在 99.9% 的情况下,这都能完美运行,并且最终用户可以以所需的格式访问数据。即:
out_file.json
{
"good": {
"JSON": "that", "I": "wanted", "to": ["push", ":)"]
},
"more_good": {
"JSON": "that", "I": "wanted", "to": ["push", ":)"]
}
}
但是,我的困难在于其他 0.1% 的推送......我一直注意到数据将被推送而不会从文件中完全删除以前的数据,我最终会遇到如下情况:
out_file.json
{
"good": {
"JSON": "that", "I": "wanted", "to": ["push", ":)"]
},
"more_good": {
"JSON": "that", "I": "wanted", "to": ["push", ":)"]
}
}ed", "to": ["push", ":)"]}}
截至目前,我想出了以下临时“解决方案”:
在推送 dict 之前,我会推送一个空字符串来清除文件:
json.dump('', out_file)
json.dump(data, out_file)
然后,在为最终用户获取文件内容时,我将检查以确保内容可用性,如下所示:
q = json.load(in_file)
while q == '': # also acts as an if
q = json.load(in_file)
return q
我主要担心的是,在数据之前推送字符串只会降低边缘情况的可能性(即使是这样),并且我将继续看到这些相同的错误发生在未来 - 并增加了 end-不断向数据文件发送空白字符串会破坏用户数据的可访问性。
由于问题仅在 0.1% 的时间内发生,而且我不确定究竟是什么导致了极端情况,因此测试起来非常耗时,因此我无法确定我尝试的临时解决方案是否成功.无法测试边缘情况似乎本身就是一个错误 - 由于缺乏对导致错误的原因的理解。
【问题讨论】:
标签: python json serialization