尝试从API获取数据

时间:2019-05-02 02:19:12

标签: python json list dictionary python-requests

我想获取一个包含美元汇率的列表。

这将显示API内的数据以供参考。

def ge(url):
  response = urllib.request.urlopen(url)
  content_str = response.read()
  content = json.loads(content_str)
  return json.dumps(content)

print (ge(url))

我在代码的这一部分遇到了麻烦,无法获得美元的汇率。我的另一个问题是,当我摆脱'base in i'时,收到一条错误消息,内容如下:“字符串索引必须是整数”。

import json
import urllib.request

url = "https://api.exchangeratesapi.io/latest"

def get_response(url):
  response = urllib.request.urlopen(url)
  content_str = response.read()
  content = json.loads(content_str)
  outList = []
  for i in content:
    if('rates' in i and 'base' in i):
      innerList = []
      innerList.append(float(i["USD"]))
      outList.append(innerList)
  return json.dumps(outList)

print (get_response(url)) 

预计:1.1218

实际结果:我不断收到一个空括号,里面什么也没有。

2 个答案:

答案 0 :(得分:2)

urllib GET请求仅返回字典。我们看到它包含三个键:base(其值为'EUR'),rates(其值为包含其他货币换算汇率的字典)和date(其值是当前日期)。您想获得美元的兑换率。因此,我们使用rates访问content['rates']键。这将返回一个字典,其键为货币名称(“ GBP”,“ USD”等),其值是等于基数1的货币金额。要访问USD条目的值,我们执行content['rates']['USD'],它返回1.1218美元兑欧元的期望结果。这些是python的基本概念,因此在进行更高级的项目之前,请务必先了解它们。

修改后的代码:

def get_response(url):
  response = urllib.request.urlopen(url)
  content_str = response.read()
  content = json.loads(content_str)
  return content['rates']['USD']

答案 1 :(得分:1)

提示:您可以在print(content)行之后添加content=json.loads(content_str),然后您可以看到content的类型,它是嵌套的Dictionary。      @ 101arrowZ的代码效果很好。我们不需要检查键ratesbase是否在字典中,因为{check}部分包含在content['rates']['USD']中。如果它们在content中,则可能返回该值;否则,不返回任何内容。