这个问题可能已经被问了很多次了,但我仍然无法理解如何使用json文件。我使用json.dump(data, filename)
。在倾销期间,我在文件结尾处获得了不必要的{}
。所以json.load(数据)给我下面的错误。json dump生成不必要的大括号
simplejson.scanner.JSONDecodeError: Extra data: line 1 column 1865 - line 1 column 1867 (char 1864 - 1866)
我看到没有办法加载第一个或第二个字典。我也读过,有一个可以用于JSON转储的分离器,但我在这里看不到用处。我应该在这里使用编码,解码吗?
我那样json.dump文件:
{
"deployCI2": ["094fd196-20f0-4e8d-b946-f74a56d2f319", "6a1ce382-98c6-4058-a929-95a7d2415fd0"],
"deployCI3": ["c8fff661-4482-4908-b722-4fac0227a8b0", "929cf1fa-3fa6-4f95-8464-d58e5490f4cf"],
"deployCI4": ["9f8ffa3c-460d-43a9-8113-58e891340e1b", "6e535e92-4da2-4228-a6ab-c8fc8d31adcd", "8e26a35e-7fb9-43b3-8026-d1283f7b678c", "f40e5c29-b4df-4cfb-9d7f-3bcc9c4dcf9f"],
"HeenaStackABC": [], "HeenaStackABC-DISK_VM1-mm55lkkvccej": ["cc2a89a2-3b27-4f88-af09-b3b0b1301056"]
}{}
编辑:我觉得代码是在这里做什么。
with open('stackList.json', 'a') as f:
for stack in stacks:
try:
hlist = hc.resources.list(stack_id=stack.id)
vlist = [o.physical_resource_id for o in hlist if o.resource_type =='OS::Cinder::Volume']
myDict[stack.stack_name] = vlist
except heatclient.exc.HTTPBadRequest as e:
pass
json.dump(myDict,f)
我编辑了下面的代码。我希望这是有效的。它去掉了最后括号
if len(myDict) != 0:
json.dump(myDict, f)
实际上,像'json'这样的主要python stdlib包被破坏以至于它生成无效的json的几率非常低。 _请发布最低限度的必要代码来重现问题_(很可能您会在自己的代码中找到错误并自行找到错误)。 –
请检查我编辑的问题 –
“重现问题所需的最小代码”意味着“无需安装整个项目即可在自己的计算机上运行代码所需的全部内容”。没有人可以在计算机上运行你的代码片段('stacks'没有定义,也不是'hc')。 –