解析 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']}")
我昨天才开始处理 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']}")