我试图将我的Django应用程序与我的队友制作的API连接起来。我编写了一个脚本来构建字符串然后发出请求。我想将结果返回到视图,以便我可以在网页上显示它们。我通过从终端调用脚本来调试脚本,但是一旦它工作,我将从我的视图文件中调用run_query方法。我执行脚本的终端返回此错误,但是:
Traceback (most recent call last):
File "website/api.py", line 45, in <module>
run_query("Statistics", 42)
File "website/api.py", line 32, in run_query
for result in json_response[0]['results']:
KeyError: 0
我已经替换了一些值,因为数据不是公开的。
这是API返回的内容:
{"Statistics":[{"DateTime":"2015-03-10T06:20:39Z","Percentage":33},{"DateTime":"2015-03-10T06:21:39Z","Percentage":23},(Hundred more records){"DateTime":"2015-03-19T21:15:35Z","Percentage":9}],"AverageStatistics":11}
这是Python脚本。
import json
import requests
def run_query(type, id):
# Base URL
root_url = "https://api.com/"
if type == "Statistics":
data_type = "Statistics"
else:
print("Error: Invalid type input.")
request_url = root_url + data_type + "?Id=" + str(id)
print request_url
results = []
try:
# Connect
response = requests.get(request_url)
print response
# Convert response to dictionary object
json_response = response.json()
print json_response
# Loop through results
if type == "Statistics":
for result in json_response[0]['results']:
results.append({
'DateTime': result['DateTime'],
'Percentage': result['Percentage']})
# Catch URLError exception
except requests.exceptions.RequestException, e:
print "Error querying API: ", e
return results
if __name__ == '__main__':
print "Connecting with API..."
run_query("Statistics", 42)
行for result in json_response[0]['results']:
会引发错误。我已经读过响应应该是一个列表对象,因此密钥应该为0,对吗?我尝试使用&#34;统计&#34;作为一个关键,然后Python告诉我,我应该输入一个整数。
print json_response
打印出来:
{u'AverageStatistics': 11.739414713896636, u'Statistics': [{u'Percentage': 33.23, u'DateTime': u'2015-03-10T06:20:39Z'},
然后记录更多。
答案 0 :(得分:1)
您的json_response
词典没有以0
为键的条目。根据代码的其余部分,您应该使用for result in json_response['Statistics']
代替for result in json_response[0]['results']
答案 1 :(得分:1)
字典中的json_response,没有键作为&#39; 0&#39;。这就是你得到KeyError的原因。
而是使用json_response [&#39; AverageStatistics&#39;]和json_response [&#39; Statistics&#39;]