如何解决JSON Python请求的问题?
所以我试图从Google Dictionary API导入一个单词的定义。但是出了点问题,下面是代码:如何解决JSON Python请求的问题?,python,json,python-requests,Python,Json,Python Requests,所以我试图从Google Dictionary API导入一个单词的定义。但是出了点问题,下面是代码: import requests import json word = "Hello" url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word r = requests.get(url) data = r.json() definition = data['meanings'
import requests
import json
word = "Hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
data = r.json()
definition = data['meanings'][1]['definition']
print(definition)
发生的情况是,它抛出一个错误,即标识符必须是int而不是str(因此它的行为类似于列表)。当我尝试使用print(数据[0])访问它时,它会打印整个内容,就像一个列表,只有一个元素,即整个JSON响应。有没有办法解决这个问题?谢谢。试试这个
对于您的问题,最好的标题是“如何使用python检查API的响应”,因为这正是您所要寻找的 在本例中,我使用
pprint()
打印响应,并很快发现您在尝试访问该值时在definition=
语句上犯了一些错误。这是您的代码,还有一些小的改进
import requests
import json
import pprint
word = "Hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
data = r.json()
pprint.pprint(data)
definition = data[0]['meanings'][1]['definitions']
print(definition)
重要的是要提到你的代码是不安全的;也就是说,如果响应为空,或者缺少键
含义
或定义
,或者含义
列表中只有一个条目,则会引发异常,并且没有代码来处理该异常。可能您希望使用尝试
,但
除外,以及其他数据健全性检查。您没有访问正确的对象。您可以尝试:
import requests
word = "hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
if r.status_code == 200:
data = r.json()
definition = data[0]['meanings'][1]['definitions'][0]['definition']
print(definition)
Json对象树
我认为在直接进入“定义”之前,您无法访问“定义”。
“定义”也是一个数组。你做得很好,但错过了一处房产,仅此而已。你所说的“修复”是什么意思?您只需要使用正确的索引来导航所接收的数据结构。对于列表,使用整数;对于字典,使用您感兴趣的任何键。响应中可能有顶级列表,因此您可能只需要
数据[0]['meansions'][1]['definition']
。显示数据
的实际外观将有助于人们帮助您。显然数据
是一个列表,因此数据[0]
起作用,数据['means']
不起作用。如果打印数据[0]
打印整个内容,然后数据
是一个数组/列表,您需要使用索引来访问它。Dictionary API返回为给定单词找到的所有定义的列表。如果只有一个匹配项,它仍然是一个列表,即使它只有一个条目。请记住,它可能会返回零结果,在这种情况下,它将返回一个对象(带有一个404错误代码,您没有检查)代码唯一的答案,即没有解释的答案通常在这里被否决。哦,我不知道,但感谢您通知我。干杯虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的其他上下文可提高其长期价值。社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(请参阅)。谢谢!成功了!:)“我认为”并不是一个明确的答案
import requests
word = "hello"
url = "https://api.dictionaryapi.dev/api/v2/entries/en_GB/"+word
r = requests.get(url)
if r.status_code == 200:
data = r.json()
definition = data[0]['meanings'][1]['definitions'][0]['definition']
print(definition)