【发布时间】:2023-03-14 10:42:01
【问题描述】:
这个输出应该比这里的长。
我从一个 GET 请求开始,我解析一个 JSON 列表并提取 ID,然后我在第二个函数上调用它,这将给我第二个 ID,然后我将使用它来调用第三个函数。但是,我只获得一个条目,而我应该获得更多条目。
代码如下:
from requests.auth import HTTPBasicAuth
import requests
import json
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def countries():
data = requests.get("https://localhost:8543/api/netim/v1/countries/", verify=False, auth=HTTPBasicAuth("admin", "admin"))
rep = data.json()
return [elem.get("id","") for elem in rep['items']]
def regions():
for c in countries():
url = requests.get("https://localhost:8543/api/netim/v1/countries/{}/regions".format(c), verify=False, auth=HTTPBasicAuth("admin", "admin"))
response = url.json()
return [cid.get("id","") for cid in response['items']]
def city():
for r in regions():
api = requests.get("https://localhost:8543/api/netim/v1/regions/{}/cities".format(r), verify=False, auth=HTTPBasicAuth("admin", "admin"))
resolt = api.json()
return(json.dumps([{"name":r.get("name",""),"id":r.get("id", "")} for r in resolt['items']], indent=4))
city()
print(city())
输出如下:
[
{
"name": "Herat",
"id": "AF~HER~Herat"
}
]
我应该有一个巨大的列表,所以我不确定我错过了什么?
【问题讨论】:
-
听起来更像是服务器端问题,而不是客户端问题
-
你
return在循环的第一次迭代中 -
只有
countries()返回的第一个项目实际上在regions()中得到处理:你得到那个的响应,然后是return,从而结束函数。同样,city()只处理来自regions()的第一项,然后返回。 -
@Macattack 谢谢,我不确定我明白吗?我不是一个大程序员,所以你能澄清一下吗?
-
@jasonharper 谢谢杰森,但如果我打印第二个函数的结果,我确实得到了来自所有国家的所有地区。那么为什么函数不将所有 id 传递给第三个呢?