Ruby-尝试使用嵌套哈希遍历哈希(在取消JSON对象之后)

Ruby-尝试使用嵌套哈希遍历哈希(在取消JSON对象之后),json,ruby,loops,hash,Json,Ruby,Loops,Hash,我是Ruby新手,我想我应该编写一个程序来调用API并反序列化JSON对象 作为参考,这里是我调用的API 迭代哈希时遇到问题,出现以下错误: Traceback (most recent call last): 2: from ruby-api.rb:21:in `<main>' 1: from ruby-api.rb:21:in `each' ruby-api.rb:23:in `block in <main>': undefined

我是Ruby新手,我想我应该编写一个程序来调用API并反序列化JSON对象

作为参考,这里是我调用的API

迭代哈希时遇到问题,出现以下错误:

Traceback (most recent call last):
        2: from ruby-api.rb:21:in `<main>'
        1: from ruby-api.rb:21:in `each'
ruby-api.rb:23:in `block in <main>': undefined method `each' for "GBP":String (NoMethodError)
以下是我运行代码时的完整输出:

Direct output
{"rates":{"CAD":1.6409680499,"HKD":9.6691560447,"ISK":152.3948565332,"PHP":63.800325678,"DKK":8.3851984951,"HUF":373.6986916727,"CZK":28.9078555786,"GBP":1.0,"RON":5.3321354371,"SEK":12.1404907631,"IDR":17442.1809197597,"INR":87.4181593576,"BRL":5.0228536133,"RUB":79.8944353978,"HRK":8.3345499467,"JPY":131.652535235,"THB":37.5506766242,"CHF":1.2255601101,"EUR":1.1230276826,"MYR":5.16064911,"BGN":2.1964175417,"TRY":7.0194845303,"CNY":8.8154304004,"NOK":11.220731091,"NZD":1.9484530294,"ZAR":18.6923465663,"USD":1.2329720928,"MXN":24.1548655174,"SGD":1.7001516087,"AUD":1.824583076,"ILS":4.2960300971,"KRW":1473.7716884721,"PLN":4.8565332135},"base":"GBP","date":"2019-10-04"}
First JSON Parse attempt
rates - {"CAD"=>1.6409680499, "HKD"=>9.6691560447, "ISK"=>152.3948565332, "PHP"=>63.800325678, "DKK"=>8.3851984951, "HUF"=>373.6986916727, "CZK"=>28.9078555786, "GBP"=>1.0, "RON"=>5.3321354371, "SEK"=>12.1404907631, "IDR"=>17442.1809197597, "INR"=>87.4181593576, "BRL"=>5.0228536133, "RUB"=>79.8944353978, "HRK"=>8.3345499467, "JPY"=>131.652535235, "THB"=>37.5506766242, "CHF"=>1.2255601101, "EUR"=>1.1230276826, "MYR"=>5.16064911, "BGN"=>2.1964175417, "TRY"=>7.0194845303, "CNY"=>8.8154304004, "NOK"=>11.220731091, "NZD"=>1.9484530294, "ZAR"=>18.6923465663, "USD"=>1.2329720928, "MXN"=>24.1548655174, "SGD"=>1.7001516087, "AUD"=>1.824583076, "ILS"=>4.2960300971, "KRW"=>1473.7716884721, "PLN"=>4.8565332135}
base - GBP
date - 2019-10-04
JSON Parse output with nested each statements
CAD - 1.6409680499
HKD - 9.6691560447
ISK - 152.3948565332
PHP - 63.800325678
DKK - 8.3851984951
HUF - 373.6986916727
CZK - 28.9078555786
GBP - 1.0
RON - 5.3321354371
SEK - 12.1404907631
IDR - 17442.1809197597
INR - 87.4181593576
BRL - 5.0228536133
RUB - 79.8944353978
HRK - 8.3345499467
JPY - 131.652535235
THB - 37.5506766242
CHF - 1.2255601101
EUR - 1.1230276826
MYR - 5.16064911
BGN - 2.1964175417
TRY - 7.0194845303
CNY - 8.8154304004
NOK - 11.220731091
NZD - 1.9484530294
ZAR - 18.6923465663
USD - 1.2329720928
MXN - 24.1548655174
SGD - 1.7001516087
AUD - 1.824583076
ILS - 4.2960300971
KRW - 1473.7716884721
PLN - 4.8565332135
Traceback (most recent call last):
        2: from ruby-api.rb:21:in `<main>'
        1: from ruby-api.rb:21:in `each'
ruby-api.rb:23:in `block in <main>': undefined method `each' for "GBP":String (NoMethodError)
直接输出
{“汇率”:{“CAD”:1.6409680499,“HKD”:9.6691560447,“ISK”:152.3948565332,“PHP”:63.800325678,“DKK”:8.3851984951,“HUF”:373.6986916727,“CZK”:28.9078555786,“GBP”:1.0,“RON”:5.3321354371,“SEK”:12.1404907631,“IDR”:17442.1809197597,“INR”:87.4181593576,“BRL”:5.0228536133,“RUB”:79.89353578,“HR35353347”,2535463535,“THB”:25353535353535,“THB”:253535353535353535“泰铢”:1.2255601011,“欧元”:1.1230276826,“马币”:5.16064911,“BGN”:2.1964175417,“TRY”:7.0194845303,“人民币”:8.8154304004,“挪威币”:11.220731091,“新西兰元”:1.9484530294,“南非兰特”:18.692346565663,“美元”:1.2329720928,“墨西哥比索”:24.1548655174,“新加坡元”:1.7001516087,“澳元”:1.824583076,“爱尔兰币”:4.2960300971,“韩元”:1473.7716884,“印尼国家电力公司”:2019“印尼国家电力公司”33854“基准日“:”
第一次JSON解析尝试
“香港特区政府”(HKD)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)香港方面(香港方面)9.666666915656565656.39484856565332,香港方面,PHP方面,香港方面(香港方面(香港方面)香港方面,香港方面(63.8009 9 9.8080807878787878787878787878787878656565656565656565656565656565656565656565656565656565656565656565656565653,香港方面),香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,香港方面,“=>131.652535235,“THB”=>5.16064911,“BGN”=>2.1964175417,”BGN”=>2.1964175417,”BGN”=>2.1964175417,”BGN”=>2.196417575417,”NaThB”=>37.550676767676767667.57676767676767414141417,”THB,CHF,CHF”=>1.55555555555555555555556565101,”CHF,CHF”=>1.555555555555555555101,欧元,欧元,欧元,欧元,欧元,欧元,欧元,欧元,欧元,欧元,欧元,1.123726.123726.123726.123767676767676767676766.1237676767676766,货币,货币,货币,MR,,=>1.1.123766,MR,MR,玛7,MR,,,=>5.7.7716884721,“印尼国家电力公司"=>4.8565332135}
基本-英镑
日期:2019-10-04
JSON解析输出和嵌套的每条语句
CAD-1.6409680499
港币-9.6691560447
ISK-152.3948565332
PHP-63.800325678
丹麦克朗-8.3851984951
HUF-373.6986916727
捷克克朗-28.9078555786
英镑-1.0英镑
RON-5.3321354371
瑞典克朗-12.1404907631
印尼盾-17442.1809197597
印度卢比-87.4181593576
BRL-5.0228536133
卢布-79.8944353978
HRK-8.3345499467
日元-131.652535235
泰铢-37.5506766242
瑞士法郎-1.2255601101
欧元-1.1230276826
马来西亚令吉-5.16064911
BGN-2.1964175417
请尝试-7.0194845303
人民币-8.8154304004元
挪威克朗-11.220731091
新西兰元-1.9484530294
南非兰特-18.6923465663
美元-1.2329720928
MXN-24.1548655174
新加坡元-1.7001516087
澳元-1.824583076
ILS-4.2960300971
韩元-1473.7716884721
印尼国家电力公司-4.8565332135
回溯(最近一次呼叫最后一次):
2:来自RubyAPI.rb:21:in`'
1:from ruby api.rb:21:in'each'
RubyAPI.rb:23:in'block-in:“GBP”的未定义方法'each':String(NoMethodError)
所以现在发生的事情是,它将愉快地遍历散列,但一旦它碰到“base”键(值为GBP),它就会崩溃

解决这个问题的最佳方法是什么?
谢谢

您试图迭代解析的JSON中的每个值,这在同一时间工作,因为
rates
的值是散列,而
base
date
的值是字符串。在这里调用
每个
并获得NoMethodError异常

尝试访问
日期
键:

JSON.parse(json_string)['rates'].each do |currency, rate|
  puts "#{currency} - #{rate}"
end

如果value.is_a,则可以在
中包装嵌套循环?Hash
但给出了更好的答案。好主意@iGian-因为基是一个字符串,所以if语句检查它是否是Hash也会起作用。非常感谢。
JSON.parse(json_string)['rates'].each do |currency, rate|
  puts "#{currency} - #{rate}"
end