我正在尝试从website获得费率。
所以我与website = Faraday.get('https://bitpay.com/api/rates')).status == 200
联系,然后尝试解析它。
我得到的一部分回复是:
#<Faraday::Response:0x007fcf1ce25688
@env=
#<struct Faraday::Env
method=:get,
body=
"[{\"code\":\"BTC\",\"name\":\"Bitcoin\",\"rate\":1}, {\"code\":\"USD\",\"name\":\"US Dollar\",\"rate\":586.66},{\"code\":\"EUR\",\"name\":\"Eurozone Euro\",\"rate\":528.991322},{\"code\":\"GBP\",\"name\":\"Pound Sterling\",\"rate\":449.441986},{\"code\":\"JPY\",\"name\":\"Japanese Yen\",\"rate\":59907.95922},{\"code\":\"CAD\",\"name\"
当我做一个website.body时,我得到一个String类,其中列出了该网站上的所有这些值。我想解析它们(JSON?),以便我可以将每个速率作为一个浮点数。
我尝试了一些JSON.parse(website.body)["GBP"]["rate"].to_f
,但又一次无法在字符串中使用。
我得到的回报是TypeError: no implicit conversion of String into Integer
我从不同的费率网站获得了类似(但不是相同)的格式,这就是我处理它的方式。我是否需要先改变其格式,还是有不同的方式?
答案 0 :(得分:2)
您尝试使用密钥"GBP"
访问已解析的JSON,但您有一个数组。就像你做的那样
a = [1,2,3,4,5]
a['foo']
试试
currencies = JSON.parse(website.body)
currencies.each { |currency| puts currency['rate'] }
并根据需要进行更改