解析 JSON 文件时出现 KeyError

Getting a KeyError when parsing JSON file

我昨天才开始处理 JSON 文件,我搜索了与 KeyError 相关的其他问题,但到目前为止 none 的答案对我有帮助。我正在尝试解析此 JSON 文件并创建一个字典,使 'article' 成为键,'views' 成为值。但是,我在尝试打印时遇到了 KeyError。如果我使用不同的 URL,该代码可以工作,但我需要使用这个。我只是打印错了吗?

def display(url, text):
    print(url)
    dictionary = json.loads(text)
    for item in dictionary['items']:
        print(f"{item['article']}:\t\t{item['views']}")


def main():
    url = "https://wikimedia.org/api/rest_v1/metrics/pageviews/top/en.wikiversity/all-access/2018/01/all-days"
    display(url, text)



main()

查看实际 JSON 数据:

{
  "items": [
    {
      "project": "en.wikiversity",
      "access": "all-access",
      "year": "2018",
      "month": "01",
      "day": "all-days",
      "articles": [
        {
          "article": "Psycholinguistics/Models_of_Speech_Production",
          "views": 585462,
          "rank": 1
        },
        {
          "article": "Wikiversity:Main_Page",
          "views": 118971,
          "rank": 2
        },
        {
          "article": "Special:Search",
          "views": 60332,
          "rank": 3
        },

你不是在找items[n]['article|views'],你实际上是在找items[n]['articles'][n]['article|views']

def display(url, text):
    print(url)
    dictionary = json.loads(text)
    for item in dictionary['items']:
        for article in item['articles']:
            print(f"{article['article']}:\t\t{article['views']}")

您的代码只有一件事有问题:

您正在迭代的项目上没有 article 键。实际上,里面有一个文章列表。所以,如果你只是添加:

for article in item['articles']:

它会起作用(改变你的显示方式):

def display(url, text):
    print(url)
    dictionary = json.loads(text)
    for item in dictionary['items']:
        for article in item['articles']:
            print(f"{article['article']}:\t\t{article['views']}")

使用类似于 firefox 的 json 查看器浏览 json。您没有正确引用它。

首先,那个页面只有一个项目条目,所以迭代看起来很奇怪。

无论哪种方式,在您的 for 循环中,每个项目都是一个字典。有一个叫做 articles 的键,它是一个字典列表,所以你需要一个嵌套循环。

def display(url, text):
    print(url)
    dictionary = json.loads(text)
    for item in dictionary['items']:
        for article in item['articles']:
            print(f"{article['article']}:\t\t{article['views']}")