Python / JSON KeyError

时间:2019-04-28 17:37:41

标签: python json

请查看此post以获得更多信息,我正在尝试找到类似的东西

contains

但是对于一个新的JSON文件,但是我一直在获取

  

KeyError:“屏幕截图”

我尝试了一些修复方法,但没有任何效果,因此欢迎任何帮助

JSON

intersects

2 个答案:

答案 0 :(得分:3)

在JSON中,许多视图没有screenshots键。第二视图(views[1])绝对不会,而第五视图(views[4])却能。

如果您尝试从视图中收集所有屏幕截图,则需要使用循环和一些条件逻辑来找到它们。

screenshots = [] # an accumulator to collect our screenshots
for view in full_data['tabs'][0]['views']: # loop over each view
    if 'screenshots' in view: # only process views with a screenshots key
        # there can be multiple screenshots per view, so concatenate them to our accumulator
        screenshots += view['screenshots']

您可以将其进一步简化为列表理解

screenshots = [*screenshot for screenshot in full_data['tabs'][0]['views'] if 'screenshots' in view]

*screenshot告诉Python“展开”屏幕截图列表。将每个项目添加到列表中,而不是将列表插入我们的列表中。

答案 1 :(得分:0)

在您发布的示例中:

screen_shots = full_data['tabs'][0]['views'][1]['screenshots']

转到:

{
        "class": "DepictionMarkdownView", "markdown": "<p>This is a description...<\/p>", "useRawFormat": true
}

没有任何名为screenshots的密钥。您不能保证该级别的JSON密钥具有该密钥。我猜测screenshots仅在classDepictionScreenshotsView的情况下才会出现。 因此,您可以尝试:

tab = full_data['tabs'][0]
screen_shots = [tab['views'][i]['screenshots'] for i in range(len(tab)) if tab['view'][i]['class'] == 'DepictionScreenshotsView')