我正在努力解决从API获得的json数据。我进入了几个api URL来获取我的数据,并将其存储在一个空列表中。然后,我想删除所有说“声誉”的字段,而我只对该数字感兴趣。在这里查看我的代码:
import json
import requests
f = requests.get('my_api_url')
if(f.ok):
data = json.loads(f.content)
url_list = [] #the list stores a number of urls that I want to request data from
for items in data:
url_list.append(items['details_url']) #grab the urls that I want to enter
total_url = [] #stores all data from all urls here
for index in range(len(url_list)):
url = requests.get(url_list[index])
if(url.ok):
url_data = json.loads(url.content)
total_url.append(url_data)
print(json.dumps(total_url, indent=2)) #only want to see if it's working
到目前为止,我很高兴,可以输入所有url并获取数据。在下一步,我会遇到麻烦。上面的代码为我输出以下json数据:
[
[
{
"id": 316,
"name": "storabro",
"url": "https://storabro.net",
"customer": true,
"administrator": false,
"reputation": 568
}
],
[
{
"id": 541,
"name": "sega",
"url": "https://wedonthaveanyyet.com",
"customer": true,
"administrator": false,
"reputation": 45
},
{
"id": 90,
"name": "Villa",
"url": "https://brandvillas.co.uk",
"customer": true,
"administrator": false,
"reputation": 6
}
]
]
但是,我只想打印出信誉,但我无法使其正常运行。如果我在我的代码中改用print(total_url['reputation'])
,则它不起作用并显示"TypeError: list indices must be integers or slices, not str"
,如果我尝试:
for s in total_url:
print(s['reputation'])
我得到相同的TypeError。
感觉就像我已经尝试了一切,但是在网络上找不到任何可以帮助我的答案,但是我知道我还有很多东西要学习,而且我的错误对于这里的某些人来说很明显。似乎与我使用Python完成的其他操作非常相似,但是这次我遇到了麻烦。为了澄清,我期望输出类似于:[568, 45, 6]
也许从一开始我就使用了错误的方法,这就是为什么它对我而言并非一直有效的原因。十月份开始使用Python进行编码,对我来说它仍然很新,但是我想学习。预先谢谢大家!
答案 0 :(得分:0)
您的total_url
似乎是一个列表列表,因此您可以编写如下函数:
def get_reputations(data):
for url in data:
for obj in url:
print(obj.get('reputation'))
get_reputations(total_url)
# output:
# 568
# 45
# 6
如果您不想首先使用列表列表,则可以使用每个结果extend
来代替列表,而不用append
来构造total_url
的表达式
答案 1 :(得分:0)
您还可以使用json.load并尝试读取响应
def get_rep():
response = urlopen(api_url)
r = response.read().decode('utf-8')
r_obj = json.loads(r)
for item in r_obj['response']:
print("Reputation: {}".format(item['reputation']))