Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决JSON Python请求的问题?_Python_Json_Python Requests - Fatal编程技术网

如何解决JSON Python请求的问题?

如何解决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'

所以我试图从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'][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)