我一直试图让这个变量列表起作用,但它一直给我keyerror 我已经尝试更改变量等但不起作用
@client.command()
async def info(ctx):
url = ('https://randomuser.me/api/')
response = requests.get(url)
title = response.json()["title"]
first = response.json()["first"]
last = response.json()["last"]
number = response.json()["number"]
street = response.json()["name"]
city = response.json()["city"]
state = response.json()["state"]
postcode = response.json()["postcode"]
country = response.json()["country"]
phone = response.json()["phone"]
age = response.json()["age"]
dob = response.json()["date"]
gender = response.json()["gender"]
username = response.json()["username"]
password = response.json()["password"]
image = response.json()["large"]
embed = discord.Embed(title="Fake Info Generator", description=f"**Name:** '{title}', '{first}' '{last}'\n**Address:** '{number}' '{street}', '{city}', '{state}', '{postcode}', '{country}'\n**Phone:** '{phone}'\n**Age:** '{age}', '{dob}'\n**Gender:** '{gender}'", color=18321)
embed.set_footer(text="Random Info")
embed.set_image(url=f"'{image}'")
await ctx.send(embed=embed)
我尝试过将变量更改为这样的事情,但仍然无法正常工作
title = response.json()["name"][0]["title"]
答案 0 :(得分:1)
仅仅是因为这就是现在 JSON 读取的工作方式。
您需要指定要读取的值的整个“路径”。你不能只得到 response.json()["title"]
,因为响应的格式不是那样的。
响应 JSON 格式如下:
{
"results":[
{
"gender":"female",
"name":{
"title":"Madame",
"first":"Germaine",
"last":"Rey"
},
...
}
],
...
}
为了能够读取 title
,您需要读取索引 0 处的数组 results
的内容 (因为您只关心第一个结果)然后检查名称,最后是标题,看起来像这样:response.json()["results"][0]["name"]["title"]