python将某些http响应json值保存到文件中



我正在针对以下的API运行查询

https://test.url/api/v2/services/level/app?domainname={}&偏移量=0&限制=100

我正在从一个名为domains.txt 的txt文件中获取域

with open('domains.txt') as f_input:
for id in f_input:
url = "https://test.url/api/v2/services/level/app?domainname={}&offset=0&limit=100".format(id.strip())
resp = requests.get(url, headers={'Accept':'application/json','Api-Token': 'XXXX'})
json_string = json.dumps(resp.json(), sort_keys=True, indent=4, separators=(',', ': '))
print(json_string)

domains.txt包含

url1.com
url2.com
url3.com

在我的回复中,我得到了以下内容:

"data": [
{
"app_name": "App1",
"category_name": "Category1",
"level": 44,
"indicator": "poor",
"id": 9563
}
],
"status": "Success",
"status_code": 200,
"total_query_count": 1

}

我现在想把App_name和Category以及domain.txt中相应的URL一起写进一个新的文本文件中,这样我最终就会得到

URL1应用程序名称类别

我正在尝试将类别和app_name转储到一个文件中,但我在中遇到了困难

with open("ergebnis.txt", "w") as f:
for i in list['data']:
f.write("{0} {1}n".format(i["app_name"],str(i["category_name"])))

我得到

Traceback (most recent call last):
File "/Users/xxxx/Desktop/test/test.py", line 25, in <module>
for i in list['data']:
TypeError: 'types.GenericAlias' object is not iterable

有人能帮我在一个文件中写(也许合并)URL App_Name和Category吗?

编辑:

with open('domains.txt') as f_input:
for id in f_input:
url = "https://test.url/api/v2/services/level/app?domainname={}&offset=0&limit=100".format(id.strip())
resp = requests.get(url, headers={'Accept':'application/json','Api-Token': 'XXX'})
# json_string = json.dumps(resp.json(), sort_keys=True, indent=4, separators=(',', ': '))
resp_json = resp.json()
for i in resp_json["data"]:
with open("ergebnis.txt", "a") as f:
f.write("{0} {1}n".format(i["app_name"],str(i["category_name"])))

成功了,我现在在每一行中都得到了app_name和category_name。

谢谢

for i in list['data']:更改为for i in resp.json()['data']:

这个代码块中的list是什么:

with open("ergebnis.txt", "w") as f:
for i in list['data']:
f.write("{0} {1}n".format(i["app_name"],str(i["category_name"])))

根据您提供的代码,您很可能需要迭代json响应:

with open('domains.txt') as f_input:
for id in f_input:
url = "https://test.url/api/v2/services/level/app?domainname={}&offset=0&limit=100".format(id.strip())
resp = requests.get(url, headers={'Accept':'application/json','Api-Token': 'XXXX'})

resp_json = resp.json()
for i in resp_json["data"]:
...

p.S.最好避免使用内置python函数或类型(例如list)的名称命名变量